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 {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue; 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 { MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; } get { return (MvcTextTemplateHost)Host; }
@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
public class ModelProperty public class ModelProperty
{ {
public string Name { get; set; } 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() public string GetViewPageType()
@ -44,15 +61,10 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
{ {
var properties = new List<ModelProperty>(); var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) { foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo)); properties.Add(new ModelProperty(propertyInfo));
} }
return properties; return properties;
} }
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#line default #line default
#line hidden #line hidden
@ -223,68 +235,74 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line hidden #line hidden
#line 37 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Create.tt" #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 default
#line hidden #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."); this.Write("\t\t<div class=\"editor-label\">\r\n\t\t\t<%: Html.LabelFor(model => model.");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default #line default
#line hidden #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" + 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."); "l.");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default #line default
#line hidden #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."); this.Write(") %>\r\n\t\t\t<%: Html.ValidationMessageFor(model => model.");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default #line default
#line hidden #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"); this.Write(") %>\r\n\t\t</div>\r\n\t\t\r\n");
#line default #line default
#line hidden #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 default
#line hidden #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<" + 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"); "div>\r\n\t<%: Html.ActionLink(\"Back\", \"Index\") %>\r\n</div>\r\n");
#line default #line default
#line hidden #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) { if (MvcHost.IsPartialView) {
// Do nothing. // Do nothing.
@ -295,13 +313,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default #line default
#line hidden #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"); this.Write("</asp:Content>\r\n");
#line default #line default
#line hidden #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 { } else {
PopIndent(); PopIndent();
@ -310,13 +328,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default #line default
#line hidden #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"); this.Write("\t</body>\r\n</html>\r\n");
#line default #line default
#line hidden #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 #line default

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

@ -34,7 +34,10 @@
<fieldset> <fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend> <legend><#= MvcHost.ViewDataType.Name #></legend>
<# foreach (ModelProperty modelProperty in GetModelProperties()) { #> <#
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (!modelProperty.IsPrimaryKey) {
#>
<div class="editor-label"> <div class="editor-label">
<%: Html.LabelFor(model => model.<#= modelProperty.Name #>) %> <%: Html.LabelFor(model => model.<#= modelProperty.Name #>) %>
</div> </div>
@ -43,7 +46,10 @@
<%: Html.ValidationMessageFor(model => model.<#= modelProperty.Name #>) %> <%: Html.ValidationMessageFor(model => model.<#= modelProperty.Name #>) %>
</div> </div>
<# } #> <#
}
}
#>
<p> <p>
<input type="submit" value="Create"/> <input type="submit" value="Create"/>
</p> </p>
@ -74,6 +80,23 @@
public class ModelProperty public class ModelProperty
{ {
public string Name { get; set; } 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() public string GetViewPageType()
@ -89,13 +112,8 @@
{ {
var properties = new List<ModelProperty>(); var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) { foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo)); properties.Add(new ModelProperty(propertyInfo));
} }
return properties; 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 {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue; 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 { MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; } get { return (MvcTextTemplateHost)Host; }
@ -29,6 +29,23 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
public class ModelProperty public class ModelProperty
{ {
public string Name { get; set; } 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() public string GetModelDirective()
@ -44,15 +61,10 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
{ {
var properties = new List<ModelProperty>(); var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) { foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo)); properties.Add(new ModelProperty(propertyInfo));
} }
return properties; return properties;
} }
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#line default #line default
#line hidden #line hidden
@ -189,67 +201,73 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line hidden #line hidden
#line 38 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Create.tt" #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 default
#line hidden #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."); this.Write("\t\t<div class=\"editor-label\">\r\n\t\t\t@Html.LabelFor(model => model.");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default #line default
#line hidden #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."); 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 default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default #line default
#line hidden #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."); this.Write(")\r\n\t\t\t@Html.ValidationMessageFor(model => model.");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default #line default
#line hidden #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"); this.Write(")\r\n\t\t</div>\r\n\t\t\r\n");
#line default #line default
#line hidden #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 default
#line hidden #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" + 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"); "\t@Html.ActionLink(\"Back\", \"Index\")\r\n</div>\r\n");
#line default #line default
#line hidden #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) { if (MvcHost.IsPartialView) {
// Do nothing. // Do nothing.
@ -260,13 +278,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default #line default
#line hidden #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"); this.Write("\t</body>\r\n</html>\r\n");
#line default #line default
#line hidden #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 #line default

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

@ -35,7 +35,10 @@
<fieldset> <fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend> <legend><#= MvcHost.ViewDataType.Name #></legend>
<# foreach (ModelProperty modelProperty in GetModelProperties()) { #> <#
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (modelProperty.Name != "Id") {
#>
<div class="editor-label"> <div class="editor-label">
@Html.LabelFor(model => model.<#= modelProperty.Name #>) @Html.LabelFor(model => model.<#= modelProperty.Name #>)
</div> </div>
@ -44,7 +47,10 @@
@Html.ValidationMessageFor(model => model.<#= modelProperty.Name #>) @Html.ValidationMessageFor(model => model.<#= modelProperty.Name #>)
</div> </div>
<# } #> <#
}
}
#>
<p> <p>
<input type="submit" value="Create"/> <input type="submit" value="Create"/>
</p> </p>
@ -70,6 +76,23 @@
public class ModelProperty public class ModelProperty
{ {
public string Name { get; set; } 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() public string GetModelDirective()
@ -85,13 +108,8 @@
{ {
var properties = new List<ModelProperty>(); var properties = new List<ModelProperty>();
foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) { foreach (PropertyInfo propertyInfo in MvcHost.GetViewDataTypeProperties()) {
properties.Add(CreateModelProperty(propertyInfo)); properties.Add(new ModelProperty(propertyInfo));
} }
return properties; 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 @@
<fieldset> <fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend> <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"> <div class="editor-label">
<%: Html.LabelFor(Function(model) model.<#= modelProperty.Name #>) %> <%: Html.LabelFor(Function(model) model.<#= modelProperty.Name #>) %>
</div> </div>
@ -44,7 +47,10 @@
<%: Html.ValidationMessageFor(Function(model) model.<#= modelProperty.Name #>) %> <%: Html.ValidationMessageFor(Function(model) model.<#= modelProperty.Name #>) %>
</div> </div>
<# Next #> <#
End If
Next
#>
<p> <p>
<input type="submit" value="Create"/> <input type="submit" value="Create"/>
</p> </p>
@ -75,7 +81,21 @@
End Property End Property
Public Class ModelProperty 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 End Class
Public Function GetViewPageType() As String Public Function GetViewPageType() As String
@ -89,12 +109,8 @@
Public Function GetModelProperties() As IEnumerable(Of ModelProperty) Public Function GetModelProperties() As IEnumerable(Of ModelProperty)
Dim properties = New List(Of ModelProperty)() Dim properties = New List(Of ModelProperty)()
For Each propertyInfo As PropertyInfo In MvcHost.GetViewDataTypeProperties() For Each propertyInfo As PropertyInfo In MvcHost.GetViewDataTypeProperties()
properties.Add(CreateModelProperty(propertyInfo)) properties.Add(New ModelProperty(propertyInfo))
Next Next
Return properties Return properties
End Function 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
@<fieldset> @<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend> <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"> <div class="editor-label">
@Html.LabelFor(Function(model) model.<#= modelProperty.Name #>) @Html.LabelFor(Function(model) model.<#= modelProperty.Name #>)
</div> </div>
@ -45,7 +48,10 @@ End Code
@Html.ValidationMessageFor(Function(model) model.<#= modelProperty.Name #>) @Html.ValidationMessageFor(Function(model) model.<#= modelProperty.Name #>)
</div> </div>
<# Next #> <#
End If
Next
#>
<p> <p>
<input type="submit" value="Create"/> <input type="submit" value="Create"/>
</p> </p>
@ -71,7 +77,21 @@ End Using
End Property End Property
Public Class ModelProperty 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 End Class
Function GetModelDirective() As String Function GetModelDirective() As String
@ -85,12 +105,8 @@ End Using
Public Function GetModelProperties() As IEnumerable(Of ModelProperty) Public Function GetModelProperties() As IEnumerable(Of ModelProperty)
Dim properties = New List(Of ModelProperty)() Dim properties = New List(Of ModelProperty)()
For Each propertyInfo As PropertyInfo In MvcHost.GetViewDataTypeProperties() For Each propertyInfo As PropertyInfo In MvcHost.GetViewDataTypeProperties()
properties.Add(CreateModelProperty(propertyInfo)) properties.Add(New ModelProperty(propertyInfo))
Next Next
Return properties Return properties
End Function 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 @@
<Compile Include="Src\CodeTemplates\AspxCSharpEditViewTemplateTests.cs" /> <Compile Include="Src\CodeTemplates\AspxCSharpEditViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\AspxCSharpEmptyViewTemplateTests.cs" /> <Compile Include="Src\CodeTemplates\AspxCSharpEmptyViewTemplateTests.cs" />
<Compile Include="Src\CodeTemplates\AspxCSharpListViewTemplateTests.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\ModelWithNoProperties.cs" />
<Compile Include="Src\CodeTemplates\Models\ModelWithOneProperty.cs" /> <Compile Include="Src\CodeTemplates\Models\ModelWithOneProperty.cs" />
<Compile Include="Src\CodeTemplates\Models\ModelWithTwoProperties.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
return GetModelProperties().First(); return GetModelProperties().First();
} }
Create.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().Single(p => p.Name == name);
}
[Test] [Test]
public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets() public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets()
{ {
@ -277,5 +282,78 @@ MyView
"; ";
Assert.AreEqual(expectedOutput, output); 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 @@
// 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 @@
// 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
return GetModelProperties().First(); return GetModelProperties().First();
} }
Create.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().Single(p => p.Name == name);
}
[Test] [Test]
public void GetModelDirective_HostViewDataTypeNameIsMyAppMyModel_ReturnsRazorModelFollowedByMyAppMyModel() public void GetModelDirective_HostViewDataTypeNameIsMyAppMyModel_ReturnsRazorModelFollowedByMyAppMyModel()
{ {
@ -278,5 +283,78 @@ namespace AspNet.Mvc.Tests.CodeTemplates
"; ";
Assert.AreEqual(expectedOutput, output); 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