Browse Source

Do not generate Html helpers for Id properties in ASP.NET MVC Create T4 template.

pull/18/head
Matt Ward 14 years ago
parent
commit
438c537303
  1. 64
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.cs
  2. 34
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.tt
  3. 60
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.cs
  4. 34
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.tt
  5. 32
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Create.tt
  6. 32
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Create.tt
  7. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj
  8. 78
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpCreateViewTemplateTests.cs
  9. 13
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithIdProperty.cs
  10. 13
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithIdPropertyInLowerCase.cs
  11. 78
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpCreateViewTemplateTests.cs

64
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue;
#line 69 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 75 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
public class ModelProperty
{
public string Name { get; set; }
public bool IsPrimaryKey { get; set; }
public ModelProperty(PropertyInfo propertyInfo)
{
this.Name = propertyInfo.Name;
this.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo);
}
bool IsPrimaryKeyProperty(PropertyInfo propertyInfo)
{
return IsMatchIgnoringCase(propertyInfo.Name, "id");
}
static bool IsMatchIgnoringCase(string a, string b)
{
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
}
public string GetViewPageType()
@ -44,15 +61,10 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -44,15 +61,10 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
{
var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo));
properties.Add(new ModelProperty(propertyInfo));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#line default
#line hidden
@ -223,68 +235,74 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -223,68 +235,74 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line hidden
#line 37 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
foreach (ModelProperty modelProperty in GetModelProperties()) {
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (!modelProperty.IsPrimaryKey) {
#line default
#line hidden
#line 38 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write("\t\t<div class=\"editor-label\">\r\n\t\t\t<%: Html.LabelFor(model => model.");
#line default
#line hidden
#line 39 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 42 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 39 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 42 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write(") %>\r\n\t\t</div>\r\n\t\t<div class=\"editor-field\">\r\n\t\t\t<%: Html.EditorFor(model => mode" +
"l.");
#line default
#line hidden
#line 42 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 42 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write(") %>\r\n\t\t\t<%: Html.ValidationMessageFor(model => model.");
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write(") %>\r\n\t\t</div>\r\n\t\t\r\n");
#line default
#line hidden
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
}
#line 49 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
}
}
#line default
#line hidden
#line 47 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 53 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write("\t\t<p>\r\n\t\t\t<input type=\"submit\" value=\"Create\"/>\r\n\t\t</p>\r\n\t</fieldset>\r\n<% } %>\r\n<" +
"div>\r\n\t<%: Html.ActionLink(\"Back\", \"Index\") %>\r\n</div>\r\n");
#line default
#line hidden
#line 55 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 61 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -295,13 +313,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -295,13 +313,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 61 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 67 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write("</asp:Content>\r\n");
#line default
#line hidden
#line 62 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 68 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
} else {
PopIndent();
@ -310,13 +328,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -310,13 +328,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 66 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 72 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 68 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
#line 74 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt"
}
#line default

34
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.tt

@ -34,7 +34,10 @@ @@ -34,7 +34,10 @@
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# foreach (ModelProperty modelProperty in GetModelProperties()) { #>
<#
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (!modelProperty.IsPrimaryKey) {
#>
<div class="editor-label">
<%: Html.LabelFor(model => model.<#= modelProperty.Name #>) %>
</div>
@ -43,7 +46,10 @@ @@ -43,7 +46,10 @@
<%: Html.ValidationMessageFor(model => model.<#= modelProperty.Name #>) %>
</div>
<# } #>
<#
}
}
#>
<p>
<input type="submit" value="Create"/>
</p>
@ -74,6 +80,23 @@ @@ -74,6 +80,23 @@
public class ModelProperty
{
public string Name { get; set; }
public bool IsPrimaryKey { get; set; }
public ModelProperty(PropertyInfo propertyInfo)
{
this.Name = propertyInfo.Name;
this.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo);
}
bool IsPrimaryKeyProperty(PropertyInfo propertyInfo)
{
return IsMatchIgnoringCase(propertyInfo.Name, "id");
}
static bool IsMatchIgnoringCase(string a, string b)
{
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
}
public string GetViewPageType()
@ -89,13 +112,8 @@ @@ -89,13 +112,8 @@
{
var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo));
properties.Add(new ModelProperty(propertyInfo));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#>

60
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -20,7 +20,7 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue;
#line 65 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 71 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
public class ModelProperty
{
public string Name { get; set; }
public bool IsPrimaryKey { get; set; }
public ModelProperty(PropertyInfo propertyInfo)
{
this.Name = propertyInfo.Name;
this.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo);
}
bool IsPrimaryKeyProperty(PropertyInfo propertyInfo)
{
return IsMatchIgnoringCase(propertyInfo.Name, "id");
}
static bool IsMatchIgnoringCase(string a, string b)
{
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
}
public string GetModelDirective()
@ -44,15 +61,10 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -44,15 +61,10 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
{
var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo));
properties.Add(new ModelProperty(propertyInfo));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#line default
#line hidden
@ -189,67 +201,73 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -189,67 +201,73 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line hidden
#line 38 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
foreach (ModelProperty modelProperty in GetModelProperties()) {
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (modelProperty.Name != "Id") {
#line default
#line hidden
#line 39 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 42 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
this.Write("\t\t<div class=\"editor-label\">\r\n\t\t\t@Html.LabelFor(model => model.");
#line default
#line hidden
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
this.Write(")\r\n\t\t</div>\r\n\t\t<div class=\"editor-field\">\r\n\t\t\t@Html.EditorFor(model => model.");
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
this.Write(")\r\n\t\t\t@Html.ValidationMessageFor(model => model.");
#line default
#line hidden
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 47 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 47 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
this.Write(")\r\n\t\t</div>\r\n\t\t\r\n");
#line default
#line hidden
#line 47 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
}
#line 50 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
}
}
#line default
#line hidden
#line 48 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 54 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
this.Write("\t\t<p>\r\n\t\t\t<input type=\"submit\" value=\"Create\"/>\r\n\t\t</p>\r\n\t</fieldset>\r\n}\r\n<div>\r\n" +
"\t@Html.ActionLink(\"Back\", \"Index\")\r\n</div>\r\n");
#line default
#line hidden
#line 56 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 62 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -260,13 +278,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -260,13 +278,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 62 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 68 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 64 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
#line 70 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt"
}
#line default

34
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.tt

@ -35,7 +35,10 @@ @@ -35,7 +35,10 @@
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# foreach (ModelProperty modelProperty in GetModelProperties()) { #>
<#
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (modelProperty.Name != "Id") {
#>
<div class="editor-label">
@Html.LabelFor(model => model.<#= modelProperty.Name #>)
</div>
@ -44,7 +47,10 @@ @@ -44,7 +47,10 @@
@Html.ValidationMessageFor(model => model.<#= modelProperty.Name #>)
</div>
<# } #>
<#
}
}
#>
<p>
<input type="submit" value="Create"/>
</p>
@ -70,6 +76,23 @@ @@ -70,6 +76,23 @@
public class ModelProperty
{
public string Name { get; set; }
public bool IsPrimaryKey { get; set; }
public ModelProperty(PropertyInfo propertyInfo)
{
this.Name = propertyInfo.Name;
this.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo);
}
bool IsPrimaryKeyProperty(PropertyInfo propertyInfo)
{
return IsMatchIgnoringCase(propertyInfo.Name, "id");
}
static bool IsMatchIgnoringCase(string a, string b)
{
return String.Equals(a, b, StringComparison.OrdinalIgnoreCase);
}
}
public string GetModelDirective()
@ -85,13 +108,8 @@ @@ -85,13 +108,8 @@
{
var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo));
properties.Add(new ModelProperty(propertyInfo));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#>

32
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Create.tt

@ -35,7 +35,10 @@ @@ -35,7 +35,10 @@
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# For Each modelProperty As ModelProperty in GetModelProperties() #>
<#
For Each modelProperty As ModelProperty in GetModelProperties()
If Not modelProperty.IsPrimaryKey Then
#>
<div class="editor-label">
<%: Html.LabelFor(Function(model) model.<#= modelProperty.Name #>) %>
</div>
@ -44,7 +47,10 @@ @@ -44,7 +47,10 @@
<%: Html.ValidationMessageFor(Function(model) model.<#= modelProperty.Name #>) %>
</div>
<# Next #>
<#
End If
Next
#>
<p>
<input type="submit" value="Create"/>
</p>
@ -75,7 +81,21 @@ @@ -75,7 +81,21 @@
End Property
Public Class ModelProperty
Public Property Name As String
Public Property Name() As String
Public Property IsPrimaryKey() As Boolean
Public Sub New(ByVal propertyInfo As PropertyInfo)
Me.Name = propertyInfo.Name
Me.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo)
End Sub
Function IsPrimaryKeyProperty(ByVal propertyInfo As PropertyInfo) As Boolean
Return IsMatchIgnoringCase(propertyInfo.Name, "id")
End Function
Shared Function IsMatchIgnoringCase(ByVal a As String, ByVal b as String) As Boolean
Return String.Equals(a, b, StringComparison.OrdinalIgnoreCase)
End Function
End Class
Public Function GetViewPageType() As String
@ -89,12 +109,8 @@ @@ -89,12 +109,8 @@
Public Function GetModelProperties() As IEnumerable(Of ModelProperty)
Dim properties = New List(Of ModelProperty)()
For Each propertyInfo As PropertyInfo In MvcHost.GetViewDataTypeProperties()
properties.Add(CreateModelProperty(propertyInfo))
properties.Add(New ModelProperty(propertyInfo))
Next
Return properties
End Function
Function CreateModelProperty(ByVal propertyInfo As PropertyInfo) As ModelProperty
Return New ModelProperty() With { .Name = propertyInfo.Name }
End Function
#>

32
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Create.tt

@ -36,7 +36,10 @@ End Code @@ -36,7 +36,10 @@ End Code
@<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# For Each modelProperty As ModelProperty in GetModelProperties() #>
<#
For Each modelProperty As ModelProperty in GetModelProperties()
If Not modelProperty.IsPrimaryKey Then
#>
<div class="editor-label">
@Html.LabelFor(Function(model) model.<#= modelProperty.Name #>)
</div>
@ -45,7 +48,10 @@ End Code @@ -45,7 +48,10 @@ End Code
@Html.ValidationMessageFor(Function(model) model.<#= modelProperty.Name #>)
</div>
<# Next #>
<#
End If
Next
#>
<p>
<input type="submit" value="Create"/>
</p>
@ -71,7 +77,21 @@ End Using @@ -71,7 +77,21 @@ End Using
End Property
Public Class ModelProperty
Public Property Name As String
Public Property Name() As String
Public Property IsPrimaryKey() As Boolean
Public Sub New(ByVal propertyInfo As PropertyInfo)
Me.Name = propertyInfo.Name
Me.IsPrimaryKey = IsPrimaryKeyProperty(propertyInfo)
End Sub
Function IsPrimaryKeyProperty(ByVal propertyInfo As PropertyInfo) As Boolean
Return IsMatchIgnoringCase(propertyInfo.Name, "id")
End Function
Shared Function IsMatchIgnoringCase(ByVal a As String, ByVal b as String) As Boolean
Return String.Equals(a, b, StringComparison.OrdinalIgnoreCase)
End Function
End Class
Function GetModelDirective() As String
@ -85,12 +105,8 @@ End Using @@ -85,12 +105,8 @@ End Using
Public Function GetModelProperties() As IEnumerable(Of ModelProperty)
Dim properties = New List(Of ModelProperty)()
For Each propertyInfo As PropertyInfo In MvcHost.GetViewDataTypeProperties()
properties.Add(CreateModelProperty(propertyInfo))
properties.Add(New ModelProperty(propertyInfo))
Next
Return properties
End Function
Function CreateModelProperty(ByVal propertyInfo As PropertyInfo) As ModelProperty
Return New ModelProperty() With { .Name = propertyInfo.Name }
End Function
#>

2
src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj

@ -91,6 +91,8 @@ @@ -91,6 +91,8 @@
<Compile Include="Src\CodeTemplates\AspxCSharpEditViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\AspxCSharpEmptyViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\AspxCSharpListViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\Models\ModelWithIdProperty.cs" />
<Compile Include="Src\CodeTemplates\Models\ModelWithIdPropertyInLowerCase.cs" />
<Compile Include="Src\CodeTemplates\Models\ModelWithNoProperties.cs" />
<Compile Include="Src\CodeTemplates\Models\ModelWithOneProperty.cs" />
<Compile Include="Src\CodeTemplates\Models\ModelWithTwoProperties.cs" />

78
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpCreateViewTemplateTests.cs

@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates
return GetModelProperties().First();
}
Create.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().Single(p => p.Name == name);
}
[Test]
public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets()
{
@ -277,5 +282,78 @@ MyView @@ -277,5 +282,78 @@ MyView
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasIdPropertyAndIsPartialView_ReturnsControlWithFormAndHtmlEditorForNonIdProperty()
{
CreateViewTemplatePreprocessor();
mvcHost.IsPartialView = true;
Type modelType = typeof(ModelWithIdProperty);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"<%@ Control Language=""C#"" Inherits=""System.Web.Mvc.ViewUserControl<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithIdProperty>"" %>
<% using (Html.BeginForm()) { %>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>ModelWithIdProperty</legend>
<div class=""editor-label"">
<%: Html.LabelFor(model => model.Name) %>
</div>
<div class=""editor-field"">
<%: Html.EditorFor(model => model.Name) %>
<%: Html.ValidationMessageFor(model => model.Name) %>
</div>
<p>
<input type=""submit"" value=""Create""/>
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink(""Back"", ""Index"") %>
</div>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Create.ModelProperty modelProperty = GetModelProperty("Id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_NamePropertyIsNotMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Create.ModelProperty modelProperty = GetModelProperty("Name");
Assert.IsFalse(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdPropertyInLowerCase_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
Create.ModelProperty modelProperty = GetModelProperty("id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
}
}

13
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithIdProperty.cs

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace AspNet.Mvc.Tests.CodeTemplates.Models
{
public class ModelWithIdProperty
{
public int Id { get; set; }
public string Name { get; set; }
}
}

13
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithIdPropertyInLowerCase.cs

@ -0,0 +1,13 @@ @@ -0,0 +1,13 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
namespace AspNet.Mvc.Tests.CodeTemplates.Models
{
public class ModelWithIdPropertyInLowerCase
{
public int id { get; set; }
public string Name { get; set; }
}
}

78
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpCreateViewTemplateTests.cs

@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates
return GetModelProperties().First();
}
Create.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().Single(p => p.Name == name);
}
[Test]
public void GetModelDirective_HostViewDataTypeNameIsMyAppMyModel_ReturnsRazorModelFollowedByMyAppMyModel()
{
@ -278,5 +283,78 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -278,5 +283,78 @@ namespace AspNet.Mvc.Tests.CodeTemplates
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasIdPropertyAndIsPartialView_ReturnsControlWithHtmlEditorsForNonIdModelProperty()
{
CreateViewTemplatePreprocessor();
mvcHost.IsPartialView = true;
Type modelType = typeof(ModelWithIdProperty);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"@model AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithIdProperty
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>ModelWithIdProperty</legend>
<div class=""editor-label"">
@Html.LabelFor(model => model.Name)
</div>
<div class=""editor-field"">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
<p>
<input type=""submit"" value=""Create""/>
</p>
</fieldset>
}
<div>
@Html.ActionLink(""Back"", ""Index"")
</div>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Create.ModelProperty modelProperty = GetModelProperty("Id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_NamePropertyIsNotMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Create.ModelProperty modelProperty = GetModelProperty("Name");
Assert.IsFalse(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdPropertyInLowerCase_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
Create.ModelProperty modelProperty = GetModelProperty("id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
}
}

Loading…
Cancel
Save