diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.cs index 12e8a506e6..276f0b9a66 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.cs +++ b/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; - #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 { 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 { { var properties = new List(); 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 { #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
\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
\r\n\t\t
\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
\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

\r\n\t\t\t\r\n\t\t

\r\n\t\r\n<% } %>\r\n<" + "div>\r\n\t<%: Html.ActionLink(\"Back\", \"Index\") %>\r\n\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 { #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("\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 { #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\r\n\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 diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.tt b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.tt index 6b1a05910b..9ba4dde3fb 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.tt +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Create.tt @@ -34,7 +34,10 @@
<#= MvcHost.ViewDataType.Name #> -<# foreach (ModelProperty modelProperty in GetModelProperties()) { #> +<# + foreach (ModelProperty modelProperty in GetModelProperties()) { + if (!modelProperty.IsPrimaryKey) { +#>
<%: Html.LabelFor(model => model.<#= modelProperty.Name #>) %>
@@ -43,7 +46,10 @@ <%: Html.ValidationMessageFor(model => model.<#= modelProperty.Name #>) %> -<# } #> +<# + } + } +#>

@@ -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 @@ { var properties = new List(); 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 }; - } #> \ No newline at end of file diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.cs index ec70604452..896f6d65cc 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.cs +++ b/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; - #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 { 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 { { var properties = new List(); 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 { #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
\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
\r\n\t\t
\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
\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

\r\n\t\t\t\r\n\t\t

\r\n\t
\r\n}\r\n
\r\n" + "\t@Html.ActionLink(\"Back\", \"Index\")\r\n
\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 { #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\r\n\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 diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.tt b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.tt index b90902473f..095e6ff4ed 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.tt +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Create.tt @@ -35,7 +35,10 @@
<#= MvcHost.ViewDataType.Name #> -<# foreach (ModelProperty modelProperty in GetModelProperties()) { #> +<# + foreach (ModelProperty modelProperty in GetModelProperties()) { + if (modelProperty.Name != "Id") { +#>
@Html.LabelFor(model => model.<#= modelProperty.Name #>)
@@ -44,7 +47,10 @@ @Html.ValidationMessageFor(model => model.<#= modelProperty.Name #>) -<# } #> +<# + } + } +#>

@@ -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 @@ { var properties = new List(); 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 }; - } #> \ No newline at end of file diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Create.tt b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Create.tt index 98072ea836..3b6dc899b2 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Create.tt +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Create.tt @@ -35,7 +35,10 @@
<#= MvcHost.ViewDataType.Name #> -<# For Each modelProperty As ModelProperty in GetModelProperties() #> +<# + For Each modelProperty As ModelProperty in GetModelProperties() + If Not modelProperty.IsPrimaryKey Then +#>
<%: Html.LabelFor(Function(model) model.<#= modelProperty.Name #>) %>
@@ -44,7 +47,10 @@ <%: Html.ValidationMessageFor(Function(model) model.<#= modelProperty.Name #>) %> -<# Next #> +<# + End If + Next +#>

@@ -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 @@ 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 #> \ No newline at end of file diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Create.tt b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Create.tt index 5930ccc335..ab0a4ec44b 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Create.tt +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Create.tt @@ -36,7 +36,10 @@ End Code @
<#= MvcHost.ViewDataType.Name #> -<# For Each modelProperty As ModelProperty in GetModelProperties() #> +<# + For Each modelProperty As ModelProperty in GetModelProperties() + If Not modelProperty.IsPrimaryKey Then +#>
@Html.LabelFor(Function(model) model.<#= modelProperty.Name #>)
@@ -45,7 +48,10 @@ End Code @Html.ValidationMessageFor(Function(model) model.<#= modelProperty.Name #>) -<# Next #> +<# + End If + Next +#>

@@ -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 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 #> \ No newline at end of file diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj b/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj index e86c4b9eef..5dea32dbe8 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/AspNet.Mvc.Tests.csproj @@ -91,6 +91,8 @@ + + diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpCreateViewTemplateTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpCreateViewTemplateTests.cs index 98ac659253..f96530741c 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpCreateViewTemplateTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpCreateViewTemplateTests.cs @@ -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 "; 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"" %> + +<% using (Html.BeginForm()) { %> + <%: Html.ValidationSummary(true) %> +
+ ModelWithIdProperty + +
+ <%: Html.LabelFor(model => model.Name) %> +
+
+ <%: Html.EditorFor(model => model.Name) %> + <%: Html.ValidationMessageFor(model => model.Name) %> +
+ +

+ +

+
+<% } %> +
+ <%: Html.ActionLink(""Back"", ""Index"") %> +
+"; + 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); + } } } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithIdProperty.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithIdProperty.cs new file mode 100644 index 0000000000..dc674e3e77 --- /dev/null +++ b/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; } + } +} diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithIdPropertyInLowerCase.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/Models/ModelWithIdPropertyInLowerCase.cs new file mode 100644 index 0000000000..9dc32a43d9 --- /dev/null +++ b/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; } + } +} diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpCreateViewTemplateTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpCreateViewTemplateTests.cs index 22c6b55962..8237d0e3d6 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpCreateViewTemplateTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpCreateViewTemplateTests.cs @@ -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 "; 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) +
+ ModelWithIdProperty + +
+ @Html.LabelFor(model => model.Name) +
+
+ @Html.EditorFor(model => model.Name) + @Html.ValidationMessageFor(model => model.Name) +
+ +

+ +

+
+} +
+ @Html.ActionLink(""Back"", ""Index"") +
+"; + 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); + } } }