Browse Source

Treat Id model property as primary key in ASP.NET MVC List T4 template.

pull/18/head
Matt Ward 14 years ago
parent
commit
392ba8707e
  1. 168
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.cs
  2. 61
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.tt
  3. 164
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.cs
  4. 61
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.tt
  5. 70
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/List.tt
  6. 70
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/List.tt
  7. 114
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpListViewTemplateTests.cs
  8. 114
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpListViewTemplateTests.cs

168
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.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 90 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 100 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.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()
@ -51,22 +68,42 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -51,22 +68,42 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
}
}
bool ModelHasProperties {
get { return ModelProperties.Count > 0; }
}
public IEnumerable<ModelProperty> GetModelProperties()
{
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)
bool ModelHasProperties {
get { return ModelProperties.Count > 0; }
}
bool ModelHasPrimaryKey {
get { return ModelPrimaryKeyName.Length > 0; }
}
string modelPrimaryKeyName;
string ModelPrimaryKeyName {
get {
if (modelPrimaryKeyName == null) {
modelPrimaryKeyName = GetModelPrimaryKeyName();
}
return modelPrimaryKeyName;
}
}
public string GetModelPrimaryKeyName()
{
return new ModelProperty() { Name = propertyInfo.Name };
foreach (ModelProperty modelProperty in ModelProperties) {
if (modelProperty.IsPrimaryKey) {
return modelProperty.Name;
}
}
return "";
}
#line default
@ -241,44 +278,46 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -241,44 +278,46 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#line default
#line hidden
#line 43 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t\t<th>\r\n\t\t\t<%: Html.LabelFor(model => model.");
#line default
#line hidden
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.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\AspxCSharp\List.tt"
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(") %>\r\n\t\t</th>\r\n");
#line default
#line hidden
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 47 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
}
}
#line default
#line hidden
#line 49 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 51 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t\t<th></th>\r\n\t</tr>\r\n\t\r\n");
#line default
#line hidden
#line 52 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 54 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
}
@ -286,41 +325,43 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -286,41 +325,43 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 55 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("<% foreach (var item in Model) { %>\r\n\t<tr>\r\n");
#line default
#line hidden
#line 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 59 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
if (ModelHasProperties) {
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#line default
#line hidden
#line 61 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 64 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t\t<td>\r\n\t\t\t<%: Html.DisplayFor(model => model.");
#line default
#line hidden
#line 62 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 65 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 62 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 65 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(") %>\r\n\t\t</td>\r\n");
#line default
#line hidden
#line 64 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 67 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
}
}
}
@ -328,15 +369,86 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -328,15 +369,86 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 68 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t\t<td>\r\n\t\t\t<%: Html.ActionLink(\"Edit\", \"Edit\") %> |\r\n\t\t\t<%: Html.ActionLink(\"Deta" +
"ils\", \"Details\") %> |\r\n\t\t\t<%: Html.ActionLink(\"Delete\", \"Delete\") %>\r\n\t\t</td>\r\n\t" +
"</tr>\r\n<% } %>\r\n</table>\r\n");
#line 72 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t\t<td>\r\n");
#line default
#line hidden
#line 73 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
if (ModelHasPrimaryKey) {
#line default
#line hidden
#line 74 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t\t\t<%: Html.ActionLink(\"Edit\", \"Edit\", new { id = item.");
#line default
#line hidden
#line 74 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( ModelPrimaryKeyName ));
#line default
#line hidden
#line 74 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(" }) %> |\r\n\t\t\t<%: Html.ActionLink(\"Details\", \"Details\", new { id = item.");
#line default
#line hidden
#line 75 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( ModelPrimaryKeyName ));
#line default
#line hidden
#line 75 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(" }) %> |\r\n\t\t\t<%: Html.ActionLink(\"Delete\", \"Delete\", new { id = item.");
#line default
#line hidden
#line 76 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( ModelPrimaryKeyName ));
#line default
#line hidden
#line 76 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(" }) %>\r\n");
#line default
#line hidden
#line 77 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
} else {
#line default
#line hidden
#line 78 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t\t\t<%: Html.ActionLink(\"Edit\", \"Edit\") %> |\r\n\t\t\t<%: Html.ActionLink(\"Details\", \"D" +
"etails\") %> |\r\n\t\t\t<%: Html.ActionLink(\"Delete\", \"Delete\") %>\r\n");
#line default
#line hidden
#line 81 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
}
#line default
#line hidden
#line 82 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t\t</td>\r\n\t</tr>\r\n<% } %>\r\n</table>\r\n");
#line default
#line hidden
#line 86 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -347,13 +459,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -347,13 +459,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 82 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 92 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("</asp:Content>\r\n");
#line default
#line hidden
#line 83 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 93 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
} else {
PopIndent();
@ -362,13 +474,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -362,13 +474,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 87 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 97 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 89 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 99 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
}
#line default

61
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.tt

@ -39,11 +39,13 @@ @@ -39,11 +39,13 @@
<tr>
<#
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#>
<th>
<%: Html.LabelFor(model => model.<#= modelProperty.Name #>) %>
</th>
<#
}
}
#>
<th></th>
@ -57,18 +59,26 @@ @@ -57,18 +59,26 @@
<#
if (ModelHasProperties) {
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#>
<td>
<%: Html.DisplayFor(model => model.<#= modelProperty.Name #>) %>
</td>
<#
}
}
}
#>
<td>
<# if (ModelHasPrimaryKey) {#>
<%: Html.ActionLink("Edit", "Edit", new { id = item.<#= ModelPrimaryKeyName #> }) %> |
<%: Html.ActionLink("Details", "Details", new { id = item.<#= ModelPrimaryKeyName #> }) %> |
<%: Html.ActionLink("Delete", "Delete", new { id = item.<#= ModelPrimaryKeyName #> }) %>
<# } else { #>
<%: Html.ActionLink("Edit", "Edit") %> |
<%: Html.ActionLink("Details", "Details") %> |
<%: Html.ActionLink("Delete", "Delete") %>
<# } #>
</td>
</tr>
<% } %>
@ -95,6 +105,23 @@ @@ -95,6 +105,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()
@ -117,21 +144,41 @@ @@ -117,21 +144,41 @@
}
}
bool ModelHasProperties {
get { return ModelProperties.Count > 0; }
}
public IEnumerable<ModelProperty> GetModelProperties()
{
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)
bool ModelHasProperties {
get { return ModelProperties.Count > 0; }
}
bool ModelHasPrimaryKey {
get { return ModelPrimaryKeyName.Length > 0; }
}
string modelPrimaryKeyName;
string ModelPrimaryKeyName {
get {
if (modelPrimaryKeyName == null) {
modelPrimaryKeyName = GetModelPrimaryKeyName();
}
return modelPrimaryKeyName;
}
}
public string GetModelPrimaryKeyName()
{
return new ModelProperty() { Name = propertyInfo.Name };
foreach (ModelProperty modelProperty in ModelProperties) {
if (modelProperty.IsPrimaryKey) {
return modelProperty.Name;
}
}
return "";
}
#>

164
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.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 86 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 96 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.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()
@ -51,22 +68,42 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -51,22 +68,42 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
}
}
bool ModelHasProperties {
get { return ModelProperties.Count > 0; }
}
public IEnumerable<ModelProperty> GetModelProperties()
{
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)
bool ModelHasProperties {
get { return ModelProperties.Count > 0; }
}
bool ModelHasPrimaryKey {
get { return ModelPrimaryKeyName.Length > 0; }
}
string modelPrimaryKeyName;
string ModelPrimaryKeyName {
get {
if (modelPrimaryKeyName == null) {
modelPrimaryKeyName = GetModelPrimaryKeyName();
}
return modelPrimaryKeyName;
}
}
public string GetModelPrimaryKeyName()
{
return new ModelProperty() { Name = propertyInfo.Name };
foreach (ModelProperty modelProperty in ModelProperties) {
if (modelProperty.IsPrimaryKey) {
return modelProperty.Name;
}
}
return "";
}
#line default
@ -207,44 +244,46 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -207,44 +244,46 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#line default
#line hidden
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t\t<th>\r\n\t\t\t@Html.LabelFor(model => model.");
#line default
#line hidden
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 46 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(")\r\n\t\t</th>\r\n");
#line default
#line hidden
#line 47 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 48 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
}
}
#line default
#line hidden
#line 50 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 52 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t\t<th></th>\r\n\t</tr>\r\n\t\r\n");
#line default
#line hidden
#line 53 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 55 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
}
@ -252,41 +291,43 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -252,41 +291,43 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 56 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 58 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("@foreach (var item in Model) {\r\n\t<tr>\r\n");
#line default
#line hidden
#line 58 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 60 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
if (ModelHasProperties) {
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#line default
#line hidden
#line 62 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 65 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t\t<td>\r\n\t\t\t@Html.DisplayFor(model => model.");
#line default
#line hidden
#line 63 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 66 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( modelProperty.Name ));
#line default
#line hidden
#line 63 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 66 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(")\r\n\t\t</td>\r\n");
#line default
#line hidden
#line 65 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 68 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
}
}
}
@ -294,15 +335,86 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -294,15 +335,86 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 69 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t\t<td>\r\n\t\t\t@Html.ActionLink(\"Edit\", \"Edit\") |\r\n\t\t\t@Html.ActionLink(\"Details\", \"De" +
"tails\") |\r\n\t\t\t@Html.ActionLink(\"Delete\", \"Delete\")\r\n\t\t</td>\r\n\t</tr>\r\n}\r\n</table>" +
"\r\n");
#line 73 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t\t<td>\r\n");
#line default
#line hidden
#line 74 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
if (ModelHasPrimaryKey) {
#line default
#line hidden
#line 75 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t\t\t@Html.ActionLink(\"Edit\", \"Edit\", new { id = item.");
#line default
#line hidden
#line 75 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( ModelPrimaryKeyName ));
#line default
#line hidden
#line 75 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(" }) |\r\n\t\t\t@Html.ActionLink(\"Details\", \"Details\", new { id = item.");
#line default
#line hidden
#line 76 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( ModelPrimaryKeyName ));
#line default
#line hidden
#line 76 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(" }) |\r\n\t\t\t@Html.ActionLink(\"Delete\", \"Delete\", new { id = item.");
#line default
#line hidden
#line 77 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( ModelPrimaryKeyName ));
#line default
#line hidden
#line 77 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(" })\r\n");
#line default
#line hidden
#line 78 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
} else {
#line default
#line hidden
#line 79 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t\t\t@Html.ActionLink(\"Edit\", \"Edit\") |\r\n\t\t\t@Html.ActionLink(\"Details\", \"Details\") " +
"|\r\n\t\t\t@Html.ActionLink(\"Delete\", \"Delete\")\r\n");
#line default
#line hidden
#line 82 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
}
#line default
#line hidden
#line 83 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t\t</td>\r\n\t</tr>\r\n}\r\n</table>\r\n");
#line default
#line hidden
#line 87 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -313,13 +425,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -313,13 +425,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 83 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 93 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t</body>\r\n</html>\r\n");
#line default
#line hidden
#line 85 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 95 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
}
#line default

61
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.tt

@ -40,11 +40,13 @@ @@ -40,11 +40,13 @@
<tr>
<#
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#>
<th>
@Html.LabelFor(model => model.<#= modelProperty.Name #>)
</th>
<#
}
}
#>
<th></th>
@ -58,18 +60,26 @@ @@ -58,18 +60,26 @@
<#
if (ModelHasProperties) {
foreach (ModelProperty modelProperty in ModelProperties) {
if (!modelProperty.IsPrimaryKey) {
#>
<td>
@Html.DisplayFor(model => model.<#= modelProperty.Name #>)
</td>
<#
}
}
}
#>
<td>
<# if (ModelHasPrimaryKey) { #>
@Html.ActionLink("Edit", "Edit", new { id = item.<#= ModelPrimaryKeyName #> }) |
@Html.ActionLink("Details", "Details", new { id = item.<#= ModelPrimaryKeyName #> }) |
@Html.ActionLink("Delete", "Delete", new { id = item.<#= ModelPrimaryKeyName #> })
<# } else { #>
@Html.ActionLink("Edit", "Edit") |
@Html.ActionLink("Details", "Details") |
@Html.ActionLink("Delete", "Delete")
<# } #>
</td>
</tr>
}
@ -91,6 +101,23 @@ @@ -91,6 +101,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()
@ -113,21 +140,41 @@ @@ -113,21 +140,41 @@
}
}
bool ModelHasProperties {
get { return ModelProperties.Count > 0; }
}
public IEnumerable<ModelProperty> GetModelProperties()
{
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)
bool ModelHasProperties {
get { return ModelProperties.Count > 0; }
}
bool ModelHasPrimaryKey {
get { return ModelPrimaryKeyName.Length > 0; }
}
string modelPrimaryKeyName;
string ModelPrimaryKeyName {
get {
if (modelPrimaryKeyName == null) {
modelPrimaryKeyName = GetModelPrimaryKeyName();
}
return modelPrimaryKeyName;
}
}
public string GetModelPrimaryKeyName()
{
return new ModelProperty() { Name = propertyInfo.Name };
foreach (ModelProperty modelProperty in ModelProperties) {
if (modelProperty.IsPrimaryKey) {
return modelProperty.Name;
}
}
return "";
}
#>

70
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/List.tt

@ -40,11 +40,13 @@ @@ -40,11 +40,13 @@
<tr>
<#
For Each modelProperty As ModelProperty in ModelProperties
If Not modelProperty.IsPrimaryKey Then
#>
<th>
<%: Html.LabelFor(Function(model) model.<#= modelProperty.Name #>) %>
</th>
<#
End If
Next
#>
<th></th>
@ -58,18 +60,26 @@ @@ -58,18 +60,26 @@
<#
If ModelHasProperties Then
For Each modelProperty As ModelProperty in ModelProperties
If Not modelProperty.IsPrimaryKey Then
#>
<td>
@Html.DisplayFor(model => model.<#= modelProperty.Name #>)
@Html.DisplayFor(Function(model) model.<#= modelProperty.Name #>)
</td>
<#
End If
Next
End If
#>
<td>
<# If ModelHasPrimaryKey Then #>
<%: Html.ActionLink("Edit", "Edit", New With { .id = item.<#= ModelPrimaryKeyName #> }) %> |
<%: Html.ActionLink("Details", "Details", New With { .id = item.<#= ModelPrimaryKeyName #> }) %> |
<%: Html.ActionLink("Delete", "Delete", New With { .id = item.<#= ModelPrimaryKeyName #> }) %>
<# Else #>
<%: Html.ActionLink("Edit", "Edit") %> |
<%: Html.ActionLink("Details", "Details") %> |
<%: Html.ActionLink("Delete", "Delete") %>
<# End If #>
</td>
</tr>
<% Next %>
@ -96,7 +106,21 @@ @@ -96,7 +106,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
@ -109,7 +133,7 @@ @@ -109,7 +133,7 @@
Private modelPropertiesList As List(Of ModelProperty)
ReadOnly Property ModelProperties As List(Of ModelProperty)
ReadOnly Property ModelProperties() As List(Of ModelProperty)
Get
If modelPropertiesList Is Nothing Then
modelPropertiesList = New List(Of ModelProperty)(GetModelProperties())
@ -118,21 +142,43 @@ @@ -118,21 +142,43 @@
End Get
End Property
ReadOnly Property ModelHasProperties As Integer
Get
Return ModelProperties.Count > 0
End Get
End Property
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 }
ReadOnly Property ModelHasProperties As Boolean
Get
Return ModelProperties.Count > 0
End Get
End Property
ReadOnly Property ModelHasPrimaryKey As Boolean
Get
Return ModelPrimaryKeyName.Length > 0
End Get
End Property
Private modelPrimaryKeyNameValue As String
ReadOnly Property ModelPrimaryKeyName() As String
Get
If modelPrimaryKeyNameValue Is Nothing Then
modelPrimaryKeyNameValue = GetModelPrimaryKeyName()
End If
Return modelPrimaryKeyNameValue
End Get
End Property
Public Function GetModelPrimaryKeyName() As String
For Each modelProperty As ModelProperty in ModelProperties
If modelProperty.IsPrimaryKey Then
Return modelProperty.Name
End If
Next
Return ""
End Function
#>

70
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/List.tt

@ -41,11 +41,13 @@ End Code @@ -41,11 +41,13 @@ End Code
<tr>
<#
For Each modelProperty As ModelProperty in ModelProperties
If Not modelProperty.IsPrimaryKey Then
#>
<th>
@Html.LabelFor(Function(model) model.<#= modelProperty.Name #>)
</th>
<#
End If
Next
#>
<th></th>
@ -59,18 +61,26 @@ End Code @@ -59,18 +61,26 @@ End Code
<#
If ModelHasProperties Then
For Each modelProperty As ModelProperty in ModelProperties
If Not modelProperty.IsPrimaryKey then
#>
<td>
@Html.DisplayFor(model => model.<#= modelProperty.Name #>)
@Html.DisplayFor(Function(model) model.<#= modelProperty.Name #>)
</td>
<#
End If
Next
End If
#>
<td>
<# If ModelHasPrimaryKey Then #>
@Html.ActionLink("Edit", "Edit", New With { .id = item.<#= ModelPrimaryKeyName #> }) |
@Html.ActionLink("Details", "Details", New With { .id = item.<#= ModelPrimaryKeyName #> }) |
@Html.ActionLink("Delete", "Delete", New With { .id = item.<#= ModelPrimaryKeyName #> })
<# Else #>
@Html.ActionLink("Edit", "Edit") |
@Html.ActionLink("Details", "Details") |
@Html.ActionLink("Delete", "Delete")
<# End If #>
</td>
</tr>
Next
@ -92,7 +102,21 @@ Next @@ -92,7 +102,21 @@ Next
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
@ -105,7 +129,7 @@ Next @@ -105,7 +129,7 @@ Next
Private modelPropertiesList As List(Of ModelProperty)
ReadOnly Property ModelProperties As List(Of ModelProperty)
ReadOnly Property ModelProperties() As List(Of ModelProperty)
Get
If modelPropertiesList Is Nothing Then
modelPropertiesList = New List(Of ModelProperty)(GetModelProperties())
@ -114,21 +138,43 @@ Next @@ -114,21 +138,43 @@ Next
End Get
End Property
ReadOnly Property ModelHasProperties As Integer
Get
Return ModelProperties.Count > 0
End Get
End Property
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 }
ReadOnly Property ModelHasProperties As Boolean
Get
Return ModelProperties.Count > 0
End Get
End Property
ReadOnly Property ModelHasPrimaryKey As Boolean
Get
Return ModelPrimaryKeyName.Length > 0
End Get
End Property
Private modelPrimaryKeyNameValue As String
ReadOnly Property ModelPrimaryKeyName() As String
Get
If modelPrimaryKeyNameValue Is Nothing Then
modelPrimaryKeyNameValue = GetModelPrimaryKeyName()
End If
Return modelPrimaryKeyNameValue
End Get
End Property
Public Function GetModelPrimaryKeyName() As String
For Each modelProperty As ModelProperty in ModelProperties
If modelProperty.IsPrimaryKey Then
Return modelProperty.Name
End If
Next
Return ""
End Function
#>

114
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpListViewTemplateTests.cs

@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates
return GetModelProperties().First();
}
AspxCSharp.List.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().First(p => p.Name == name);
}
[Test]
public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets()
{
@ -284,5 +289,114 @@ MyView @@ -284,5 +289,114 @@ MyView
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasIdPropertyAndIsPartialView_UsesIdPropertyInActionLinksOnTableRow()
{
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<IEnumerable<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithIdProperty>>"" %>
<p>
<%: Html.ActionLink(""Create"", ""Create"") %>
</p>
<table>
<tr>
<th>
<%: Html.LabelFor(model => model.Name) %>
</th>
<th></th>
</tr>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.DisplayFor(model => model.Name) %>
</td>
<td>
<%: Html.ActionLink(""Edit"", ""Edit"", new { id = item.Id }) %> |
<%: Html.ActionLink(""Details"", ""Details"", new { id = item.Id }) %> |
<%: Html.ActionLink(""Delete"", ""Delete"", new { id = item.Id }) %>
</td>
</tr>
<% } %>
</table>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
AspxCSharp.List.ModelProperty modelProperty = GetModelProperty("Id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_NamePropertyIsNotMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
AspxCSharp.List.ModelProperty modelProperty = GetModelProperty("Name");
Assert.IsFalse(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdPropertyInLowerCase_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
AspxCSharp.List.ModelProperty modelProperty = GetModelProperty("id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasIdAndNameProperty_ReturnsId()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual("Id", primaryKeyName);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasIdPropertyInLowerCase_ReturnsLowercaseId()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual("id", primaryKeyName);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasNameProperty_ReturnsEmptyString()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithOneProperty);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual(String.Empty, primaryKeyName);
}
}
}

114
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpListViewTemplateTests.cs

@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -35,6 +35,11 @@ namespace AspNet.Mvc.Tests.CodeTemplates
return GetModelProperties().First();
}
CSHtml.List.ModelProperty GetModelProperty(string name)
{
return GetModelProperties().First(p => p.Name == name);
}
[Test]
public void GetModelDirective_HostViewDataTypeNameIsMyAppMyModel_ReturnsRazorModelFollowedByIEnumerableMyAppMyModel()
{
@ -285,5 +290,114 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -285,5 +290,114 @@ namespace AspNet.Mvc.Tests.CodeTemplates
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void TransformText_ModelHasIdPropertyAndIsPartialView_UsesIdPropertyInActionLinksOnTableRow()
{
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 IEnumerable<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithIdProperty>
<p>
@Html.ActionLink(""Create"", ""Create"")
</p>
<table>
<tr>
<th>
@Html.LabelFor(model => model.Name)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(model => model.Name)
</td>
<td>
@Html.ActionLink(""Edit"", ""Edit"", new { id = item.Id }) |
@Html.ActionLink(""Details"", ""Details"", new { id = item.Id }) |
@Html.ActionLink(""Delete"", ""Delete"", new { id = item.Id })
</td>
</tr>
}
</table>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
CSHtml.List.ModelProperty modelProperty = GetModelProperty("Id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdAndNameProperty_NamePropertyIsNotMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
CSHtml.List.ModelProperty modelProperty = GetModelProperty("Name");
Assert.IsFalse(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelProperties_ModelHasIdPropertyInLowerCase_IdPropertyIsMarkedAsPrimaryKey()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
CSHtml.List.ModelProperty modelProperty = GetModelProperty("id");
Assert.IsTrue(modelProperty.IsPrimaryKey);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasIdAndNameProperty_ReturnsId()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdProperty);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual("Id", primaryKeyName);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasIdPropertyInLowerCase_ReturnsLowercaseId()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithIdPropertyInLowerCase);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual("id", primaryKeyName);
}
[Test]
public void GetModelPrimaryKeyName_ModelHasNameProperty_ReturnsEmptyString()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithOneProperty);
string primaryKeyName = templatePreprocessor.GetModelPrimaryKeyName();
Assert.AreEqual(String.Empty, primaryKeyName);
}
}
}

Loading…
Cancel
Save