Browse Source

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

pull/18/head
Matt Ward 14 years ago
parent
commit
96678d37e0
  1. 60
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Delete.cs
  2. 34
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Delete.tt
  3. 56
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Delete.cs
  4. 34
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Delete.tt
  5. 32
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Delete.tt
  6. 32
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Delete.tt
  7. 73
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpDeleteViewTemplateTests.cs
  8. 73
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpDeleteViewTemplateTests.cs

60
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Delete.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 64 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 70 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.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
@ -222,56 +234,62 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -222,56 +234,62 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line hidden
#line 34 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
foreach (ModelProperty modelProperty in GetModelProperties()) {
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (!modelProperty.IsPrimaryKey) {
#line default
#line hidden
#line 35 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 38 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
this.Write("\t\r\n\t<div class=\"display-label\">\r\n\t\t<%: Html.LabelFor(model => model.");
#line default
#line hidden
#line 37 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name));
#line default
#line hidden
#line 37 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
this.Write(") %>\r\n\t</div>\r\n\t<div class=\"display-field\">\r\n\t\t<%: Html.DisplayFor(model => model" +
".");
#line default
#line hidden
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.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\AspxCSharp\Delete.tt"
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
this.Write(") %>\r\n\t</div>\r\n");
#line default
#line hidden
#line 42 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
}
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
}
}
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 49 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
this.Write("</fieldset>\r\n<% using (Html.BeginForm()) { %>\r\n\t<p>\r\n\t\t<input type=\"submit\" value" +
"=\"Delete\"/> |\r\n\t\t<%: Html.ActionLink(\"Back\", \"Index\") %>\r\n\t</p>\r\n<% } %>\r\n");
#line default
#line hidden
#line 50 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 56 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -282,13 +300,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -282,13 +300,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 56 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 62 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
this.Write("</asp:Content>\r\n");
#line default
#line hidden
#line 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 63 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
} else {
PopIndent();
@ -297,13 +315,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -297,13 +315,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\Delete.tt"
#line 67 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 63 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
#line 69 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\Delete.tt"
}
#line default

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

@ -31,7 +31,10 @@ @@ -31,7 +31,10 @@
#>
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# foreach (ModelProperty modelProperty in GetModelProperties()) { #>
<#
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (!modelProperty.IsPrimaryKey) {
#>
<div class="display-label">
<%: Html.LabelFor(model => model.<#= modelProperty.Name#>) %>
@ -39,7 +42,10 @@ @@ -39,7 +42,10 @@
<div class="display-field">
<%: Html.DisplayFor(model => model.<#= modelProperty.Name#>) %>
</div>
<# } #>
<#
}
}
#>
</fieldset>
<% using (Html.BeginForm()) { %>
<p>
@ -69,6 +75,23 @@ @@ -69,6 +75,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()
@ -84,13 +107,8 @@ @@ -84,13 +107,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 };
}
#>

56
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Delete.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 60 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 66 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.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
@ -188,55 +200,61 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -188,55 +200,61 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line hidden
#line 35 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
foreach (ModelProperty modelProperty in GetModelProperties()) {
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (!modelProperty.IsPrimaryKey) {
#line default
#line hidden
#line 36 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 39 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
this.Write("\t\r\n\t<div class=\"display-label\">\r\n\t\t@Html.LabelFor(model => model.");
#line default
#line hidden
#line 38 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 38 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
this.Write(")\r\n\t</div>\r\n\t<div class=\"display-field\">\r\n\t\t@Html.DisplayFor(model => model.");
#line default
#line hidden
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
this.Write(")\r\n\t</div>\r\n");
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
}
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
}
}
#line default
#line hidden
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 50 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
this.Write("</fieldset>\r\n@using (Html.BeginForm()) {\r\n\t<p>\r\n\t\t<input type=\"submit\" value=\"Del" +
"ete\"/> |\r\n\t\t@Html.ActionLink(\"Back\", \"Index\")\r\n\t</p>\r\n}\r\n");
#line default
#line hidden
#line 51 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -247,13 +265,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -247,13 +265,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 63 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 59 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
#line 65 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\Delete.tt"
}
#line default

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

@ -32,7 +32,10 @@ @@ -32,7 +32,10 @@
#>
<fieldset>
<legend><#= MvcHost.ViewDataType.Name #></legend>
<# foreach (ModelProperty modelProperty in GetModelProperties()) { #>
<#
foreach (ModelProperty modelProperty in GetModelProperties()) {
if (!modelProperty.IsPrimaryKey) {
#>
<div class="display-label">
@Html.LabelFor(model => model.<#= modelProperty.Name #>)
@ -40,7 +43,10 @@ @@ -40,7 +43,10 @@
<div class="display-field">
@Html.DisplayFor(model => model.<#= modelProperty.Name #>)
</div>
<# } #>
<#
}
}
#>
</fieldset>
@using (Html.BeginForm()) {
<p>
@ -65,6 +71,23 @@ @@ -65,6 +71,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()
@ -80,13 +103,8 @@ @@ -80,13 +103,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/Delete.tt

@ -32,7 +32,10 @@ @@ -32,7 +32,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="display-label">
<%: Html.LabelFor(Function(model) model.<#= modelProperty.Name #>) %>
@ -40,7 +43,10 @@ @@ -40,7 +43,10 @@
<div class="display-field">
<%: Html.DisplayFor(Function(model) model.<#= modelProperty.Name #>) %>
</div>
<# Next #>
<#
End If
Next
#>
</fieldset>
<% Using Html.BeginForm() %>
<p>
@ -70,7 +76,21 @@ @@ -70,7 +76,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
@ -84,12 +104,8 @@ @@ -84,12 +104,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/Delete.tt

@ -33,7 +33,10 @@ End Code @@ -33,7 +33,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="display-label">
@Html.LabelFor(Function(model) model.<#= modelProperty.Name #>)
@ -41,7 +44,10 @@ End Code @@ -41,7 +44,10 @@ End Code
<div class="display-field">
@Html.DisplayFor(Function(model) model.<#= modelProperty.Name #>)
</div>
<# Next #>
<#
End If
Next
#>
</fieldset>
@Using Html.BeginForm()
@<p>
@ -66,7 +72,21 @@ End Using @@ -66,7 +72,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
@ -80,12 +100,8 @@ End Using @@ -80,12 +100,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
#>

73
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpDeleteViewTemplateTests.cs

@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates
return GetModelProperties().First();
}
Delete.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().Single(p => p.Name == name);
}
[Test]
public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets()
{
@ -254,5 +259,73 @@ MyView @@ -254,5 +259,73 @@ MyView
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasIdPropertyAndIsPartialView_NoHtmlHelpersGeneratedForModelIdProperty()
{
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>"" %>
<fieldset>
<legend>ModelWithIdProperty</legend>
<div class=""display-label"">
<%: Html.LabelFor(model => model.Name) %>
</div>
<div class=""display-field"">
<%: Html.DisplayFor(model => model.Name) %>
</div>
</fieldset>
<% using (Html.BeginForm()) { %>
<p>
<input type=""submit"" value=""Delete""/> |
<%: Html.ActionLink(""Back"", ""Index"") %>
</p>
<% } %>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Delete.ModelProperty modelProperty = GetModelProperty("Id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_NamePropertyIsNotMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Delete.ModelProperty modelProperty = GetModelProperty("Name");
Assert.IsFalse(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdPropertyInLowerCase_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
Delete.ModelProperty modelProperty = GetModelProperty("id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
}
}

73
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpDeleteViewTemplateTests.cs

@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates
return GetModelProperties().First();
}
Delete.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().Single(p => p.Name == name);
}
[Test]
public void GetModelDirective_HostViewDataTypeNameIsMyAppMyModel_ReturnsRazorModelFollowedByMyAppMyModel()
{
@ -255,5 +260,73 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -255,5 +260,73 @@ namespace AspNet.Mvc.Tests.CodeTemplates
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasIdProperty_NoHtmlHelpersGeneratedForModelIdProperty()
{
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
<fieldset>
<legend>ModelWithIdProperty</legend>
<div class=""display-label"">
@Html.LabelFor(model => model.Name)
</div>
<div class=""display-field"">
@Html.DisplayFor(model => model.Name)
</div>
</fieldset>
@using (Html.BeginForm()) {
<p>
<input type=""submit"" value=""Delete""/> |
@Html.ActionLink(""Back"", ""Index"")
</p>
}
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Delete.ModelProperty modelProperty = GetModelProperty("Id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_NamePropertyIsNotMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
Delete.ModelProperty modelProperty = GetModelProperty("Name");
Assert.IsFalse(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdPropertyInLowerCase_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
Delete.ModelProperty modelProperty = GetModelProperty("id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
}
}

Loading…
Cancel
Save