Browse Source

Generate code for model properties in ASP.NET MVC List T4 templates.

pull/18/head
Matt Ward 14 years ago
parent
commit
7e2fa745ec
  1. 194
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.cs
  2. 66
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.tt
  3. 176
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.cs
  4. 78
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.tt
  5. 65
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/List.tt
  6. 79
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/List.tt
  7. 81
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/AspxCSharpListViewTemplateTests.cs
  8. 123
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/CodeTemplates/RazorCSharpListViewTemplateTests.cs

194
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.cs

@ -10,6 +10,8 @@ @@ -10,6 +10,8 @@
namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
using ICSharpCode.AspNet.Mvc;
using System.Collections.Generic;
using System.Reflection;
using System;
@ -18,12 +20,17 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -18,12 +20,17 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue;
#line 58 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 86 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
}
public class ModelProperty
{
public string Name { get; set; }
}
public string GetViewPageType()
{
string viewDataTypeName = MvcHost.ViewDataTypeName;
@ -32,6 +39,35 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -32,6 +39,35 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
}
return String.Empty;
}
List<ModelProperty> modelProperties;
List<ModelProperty> ModelProperties {
get {
if (modelProperties == null) {
modelProperties = new List<ModelProperty>(GetModelProperties());
}
return modelProperties;
}
}
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));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#line default
#line hidden
@ -49,92 +85,92 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -49,92 +85,92 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
public virtual string TransformText() {
this.GenerationEnvironment = null;
#line 3 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 5 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
if (MvcHost.IsPartialView) {
#line default
#line hidden
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 6 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("<%@ Control Language=\"C#\" Inherits=\"System.Web.Mvc.ViewUserControl<IEnumerable");
#line default
#line hidden
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 6 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( GetViewPageType() ));
#line default
#line hidden
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 6 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(">\" %>\r\n\r\n");
#line default
#line hidden
#line 6 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 8 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
} else if (MvcHost.IsContentPage) {
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 9 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("<%@ Page Language=\"C#\" MasterPageFile=\"");
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 9 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.MasterPageFile ));
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 9 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\" Inherits=\"System.Web.Mvc.ViewPage<IEnumerable");
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 9 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( GetViewPageType() ));
#line default
#line hidden
#line 7 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 9 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(">\" %>\r\n\r\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"Title\" runat=\"server\">\r" +
"\n");
#line default
#line hidden
#line 10 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 12 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 10 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 12 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\r\n</asp:Content>\r\n\r\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"");
#line default
#line hidden
#line 13 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 15 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.PrimaryContentPlaceHolderID ));
#line default
#line hidden
#line 13 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 15 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\" runat=\"server\">\r\n");
#line default
#line hidden
#line 14 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 16 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
PushIndent("\t");
} else {
@ -143,37 +179,37 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -143,37 +179,37 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 20 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("<%@ Page Language=\"C#\" Inherits=\"System.Web.Mvc.ViewPage<IEnumerable");
#line default
#line hidden
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 20 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( GetViewPageType() ));
#line default
#line hidden
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 20 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(">\" %>\r\n\r\n<!DOCTYPE html>\r\n<html>\r\n\t<head runat=\"server\">\r\n\t\t<title>");
#line default
#line hidden
#line 23 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 25 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 23 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 25 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("</title>\r\n\t</head>\r\n\t<body>\r\n");
#line default
#line hidden
#line 26 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 28 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
PushIndent("\t\t");
}
@ -182,27 +218,99 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -182,27 +218,99 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 30 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(@"<p>
<%: Html.ActionLink(""Create"", ""Create"") %>
</p>
<table>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> |
<%: Html.ActionLink(""Details"", ""Details"") %> |
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr>
<% } %>
</table>
");
#line 32 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("<p>\r\n\t<%: Html.ActionLink(\"Create\", \"Create\") %>\r\n</p>\r\n<table>\r\n");
#line default
#line hidden
#line 36 "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) {
#line default
#line hidden
#line 40 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write("\t<tr>\r\n\t\t<th>\r\n\t\t\t<%: Html.LabelFor(model => model.");
#line default
#line hidden
#line 42 "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 42 "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\t\t<th></th>\r\n\t</tr>\r\n\t\r\n");
#line default
#line hidden
#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 51 "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 53 "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) {
#line default
#line hidden
#line 57 "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 58 "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 58 "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 60 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
}
}
#line default
#line hidden
#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.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 default
#line hidden
#line 44 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 72 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -213,13 +321,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -213,13 +321,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default
#line hidden
#line 50 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 78 "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 51 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 79 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
} else {
PopIndent();
@ -228,13 +336,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp { @@ -228,13 +336,13 @@ 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 83 "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 57 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
#line 85 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
}
#line default

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

@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
<#@ template language="C#" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<# if (MvcHost.IsPartialView) { #>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<#= GetViewPageType() #>>" %>
@ -31,15 +33,41 @@ @@ -31,15 +33,41 @@
<%: Html.ActionLink("Create", "Create") %>
</p>
<table>
<% foreach (var item in Model) { %>
<#
if (ModelHasProperties) {
foreach (ModelProperty modelProperty in ModelProperties) {
#>
<tr>
<th>
<%: Html.LabelFor(model => model.<#= modelProperty.Name #>) %>
</th>
<th></th>
</tr>
<#
}
}
#>
<% foreach (var item in Model) { %>
<tr>
<#
if (ModelHasProperties) {
foreach (ModelProperty modelProperty in ModelProperties) {
#>
<td>
<%: Html.DisplayFor(model => model.<#= modelProperty.Name #>) %>
</td>
<#
}
}
#>
<td>
<%: Html.ActionLink("Edit", "Edit") %> |
<%: Html.ActionLink("Details", "Details") %> |
<%: Html.ActionLink("Delete", "Delete") %>
</td>
</tr>
<% } %>
<% } %>
</table>
<#
if (MvcHost.IsPartialView) {
@ -60,6 +88,11 @@ @@ -60,6 +88,11 @@
get { return (MvcTextTemplateHost)Host; }
}
public class ModelProperty
{
public string Name { get; set; }
}
public string GetViewPageType()
{
string viewDataTypeName = MvcHost.ViewDataTypeName;
@ -68,4 +101,33 @@ @@ -68,4 +101,33 @@
}
return String.Empty;
}
List<ModelProperty> modelProperties;
List<ModelProperty> ModelProperties {
get {
if (modelProperties == null) {
modelProperties = new List<ModelProperty>(GetModelProperties());
}
return modelProperties;
}
}
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));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#>

176
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/List.cs

@ -10,6 +10,8 @@ @@ -10,6 +10,8 @@
namespace ICSharpCode.AspNet.Mvc.CSHtml {
using ICSharpCode.AspNet.Mvc;
using System.Collections.Generic;
using System.Reflection;
using System;
@ -18,12 +20,17 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -18,12 +20,17 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue;
#line 54 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 82 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; }
}
public class ModelProperty
{
public string Name { get; set; }
}
public string GetModelDirective()
{
string viewDataTypeName = MvcHost.ViewDataTypeName;
@ -32,6 +39,35 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -32,6 +39,35 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
}
return String.Empty;
}
List<ModelProperty> modelProperties;
List<ModelProperty> ModelProperties {
get {
if (modelProperties == null) {
modelProperties = new List<ModelProperty>(GetModelProperties());
}
return modelProperties;
}
}
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));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#line default
#line hidden
@ -49,19 +85,19 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -49,19 +85,19 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
public virtual string TransformText() {
this.GenerationEnvironment = null;
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 6 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( GetModelDirective() ));
#line default
#line hidden
#line 4 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 6 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\r\n\r\n");
#line default
#line hidden
#line 6 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 8 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -71,49 +107,49 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -71,49 +107,49 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 11 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 13 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("@{\r\n\tViewBag.Title = \"");
#line default
#line hidden
#line 12 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 14 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 12 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 14 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\";\r\n\tLayout = \"");
#line default
#line hidden
#line 13 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 15 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.MasterPageFile ));
#line default
#line hidden
#line 13 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 15 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\";\r\n}\r\n\r\n<h2>");
#line default
#line hidden
#line 16 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 16 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("</h2>\r\n\r\n");
#line default
#line hidden
#line 18 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 20 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
} else {
@ -121,25 +157,25 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -121,25 +157,25 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 21 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 23 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("<!DOCTYPE html>\r\n<html>\r\n\t<head runat=\"server\">\r\n\t\t<title>");
#line default
#line hidden
#line 24 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 26 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default
#line hidden
#line 24 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 26 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("</title>\r\n\t</head>\r\n\t<body>\r\n");
#line default
#line hidden
#line 27 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 29 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
PushIndent("\t\t");
}
@ -148,27 +184,99 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -148,27 +184,99 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 31 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(@"<p>
@Html.ActionLink(""Create"", ""Create"")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
#line 33 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("<p>\r\n\t@Html.ActionLink(\"Create\", \"Create\")\r\n</p>\r\n<table>\r\n");
#line default
#line hidden
#line 37 "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) {
#line default
#line hidden
#line 41 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write("\t<tr>\r\n\t\t<th>\r\n\t\t\t@Html.LabelFor(model => model.");
#line default
#line hidden
#line 43 "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 43 "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\t\t<th></th>\r\n\t</tr>\r\n\t\r\n");
#line default
#line hidden
#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 52 "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 54 "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) {
#line default
#line hidden
#line 58 "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 59 "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 59 "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 61 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
}
}
</table>
");
#line default
#line hidden
#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.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 default
#line hidden
#line 45 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 73 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
if (MvcHost.IsPartialView) {
// Do nothing.
@ -179,13 +287,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml { @@ -179,13 +287,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default
#line hidden
#line 51 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 79 "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 53 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
#line 81 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
}
#line default

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

@ -1,5 +1,7 @@ @@ -1,5 +1,7 @@
<#@ template language="C#" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<#@ output extension=".cshtml" #>
<#= GetModelDirective() #>
@ -32,15 +34,41 @@ @@ -32,15 +34,41 @@
@Html.ActionLink("Create", "Create")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink("Edit", "Edit") |
@Html.ActionLink("Details", "Details") |
@Html.ActionLink("Delete", "Delete")
</td>
</tr>
<#
if (ModelHasProperties) {
foreach (ModelProperty modelProperty in ModelProperties) {
#>
<tr>
<th>
@Html.LabelFor(model => model.<#= modelProperty.Name #>)
</th>
<th></th>
</tr>
<#
}
}
#>
@foreach (var item in Model) {
<tr>
<#
if (ModelHasProperties) {
foreach (ModelProperty modelProperty in ModelProperties) {
#>
<td>
@Html.DisplayFor(model => model.<#= modelProperty.Name #>)
</td>
<#
}
}
#>
<td>
@Html.ActionLink("Edit", "Edit") |
@Html.ActionLink("Details", "Details") |
@Html.ActionLink("Delete", "Delete")
</td>
</tr>
}
</table>
<#
if (MvcHost.IsPartialView) {
@ -56,6 +84,11 @@ @@ -56,6 +84,11 @@
get { return (MvcTextTemplateHost)Host; }
}
public class ModelProperty
{
public string Name { get; set; }
}
public string GetModelDirective()
{
string viewDataTypeName = MvcHost.ViewDataTypeName;
@ -64,4 +97,33 @@ @@ -64,4 +97,33 @@
}
return String.Empty;
}
List<ModelProperty> modelProperties;
List<ModelProperty> ModelProperties {
get {
if (modelProperties == null) {
modelProperties = new List<ModelProperty>(GetModelProperties());
}
return modelProperties;
}
}
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));
}
return properties;
}
ModelProperty CreateModelProperty(PropertyInfo propertyInfo)
{
return new ModelProperty() { Name = propertyInfo.Name };
}
#>

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

@ -1,6 +1,8 @@ @@ -1,6 +1,8 @@
<#@ template language="VB" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="Microsoft.VisualBasic.Constants" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<# If MvcHost.IsPartialView Then #>
<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl<#= GetViewPageType() #>" %>
@ -32,15 +34,41 @@ @@ -32,15 +34,41 @@
<%: Html.ActionLink("Create", "Create") %>
</p>
<table>
<% For Each item in Model %>
<#
If ModelHasProperties Then
For Each modelProperty As ModelProperty in ModelProperties
#>
<tr>
<th>
<%: Html.LabelFor(Function(model) model.<#= modelProperty.Name #>) %>
</th>
<th></th>
</tr>
<#
Next
End If
#>
<% For Each item in Model %>
<tr>
<#
If ModelHasProperties Then
For Each modelProperty As ModelProperty in ModelProperties
#>
<td>
@Html.DisplayFor(model => model.<#= modelProperty.Name #>)
</td>
<#
Next
End If
#>
<td>
<%: Html.ActionLink("Edit", "Edit") %> |
<%: Html.ActionLink("Details", "Details") %> |
<%: Html.ActionLink("Delete", "Delete") %>
</td>
</tr>
<% Next %>
<% Next %>
</table>
<#
If MvcHost.IsPartialView Then
@ -63,6 +91,10 @@ @@ -63,6 +91,10 @@
End Get
End Property
Public Class ModelProperty
Public Property Name As String
End Class
Public Function GetViewPageType() As String
Dim viewDataTypeName As String = MvcHost.ViewDataTypeName
If Not String.IsNullOrEmpty(viewDataTypeName) Then
@ -70,4 +102,33 @@ @@ -70,4 +102,33 @@
End If
Return String.Empty
End Function
Private modelPropertiesList As List(Of ModelProperty)
ReadOnly Property ModelProperties As List(Of ModelProperty)
Get
If modelPropertiesList Is Nothing Then
modelPropertiesList = New List(Of ModelProperty)(GetModelProperties())
End If
Return modelPropertiesList
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))
Next
Return properties
End Function
Function CreateModelProperty(ByVal propertyInfo As PropertyInfo) As ModelProperty
Return New ModelProperty() With { .Name = propertyInfo.Name }
End Function
#>

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

@ -1,6 +1,8 @@ @@ -1,6 +1,8 @@
<#@ template language="VB" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="Microsoft.VisualBasic.Constants" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<#@ output extension=".vbhtml" #>
<#= GetModelDirective() #>
@ -33,15 +35,41 @@ End Code @@ -33,15 +35,41 @@ End Code
@Html.ActionLink("Create", "Create")
</p>
<table>
@For Each item in Model
@<tr>
<td>
@Html.ActionLink("Edit", "Edit") |
@Html.ActionLink("Details", "Details") |
@Html.ActionLink("Delete", "Delete")
</td>
</tr>
Next
<#
If ModelHasProperties Then
For Each modelProperty As ModelProperty in ModelProperties
#>
<tr>
<th>
@Html.LabelFor(Function(model) model.<#= modelProperty.Name #>)
</th>
<th></th>
</tr>
<#
Next
End If
#>
@For Each item in Model
@<tr>
<#
If ModelHasProperties Then
For Each modelProperty As ModelProperty in ModelProperties
#>
<td>
@Html.DisplayFor(model => model.<#= modelProperty.Name #>)
</td>
<#
Next
End If
#>
<td>
@Html.ActionLink("Edit", "Edit") |
@Html.ActionLink("Details", "Details") |
@Html.ActionLink("Delete", "Delete")
</td>
</tr>
Next
</table>
<#
If MvcHost.IsPartialView Then
@ -59,6 +87,10 @@ End Code @@ -59,6 +87,10 @@ End Code
End Get
End Property
Public Class ModelProperty
Public Property Name As String
End Class
Function GetModelDirective() As String
Dim viewDataTypeName As String = MvcHost.ViewDataTypeName
If Not String.IsNullOrEmpty(viewDataTypeName) Then
@ -66,4 +98,33 @@ End Code @@ -66,4 +98,33 @@ End Code
End If
Return String.Empty
End Function
Private modelPropertiesList As List(Of ModelProperty)
ReadOnly Property ModelProperties As List(Of ModelProperty)
Get
If modelPropertiesList Is Nothing Then
modelPropertiesList = New List(Of ModelProperty)(GetModelProperties())
End If
Return modelPropertiesList
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))
Next
Return properties
End Function
Function CreateModelProperty(ByVal propertyInfo As PropertyInfo) As ModelProperty
Return New ModelProperty() With { .Name = propertyInfo.Name }
End Function
#>

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

@ -2,10 +2,13 @@ @@ -2,10 +2,13 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Linq;
using AspNet.Mvc.Tests.CodeTemplates.Models;
using AspNet.Mvc.Tests.Helpers;
using AspxCSharp = ICSharpCode.AspNet.Mvc.AspxCSharp;
using NUnit.Framework;
using AspxCSharp = ICSharpCode.AspNet.Mvc.AspxCSharp;
namespace AspNet.Mvc.Tests.CodeTemplates
{
@ -22,6 +25,16 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -22,6 +25,16 @@ namespace AspNet.Mvc.Tests.CodeTemplates
templatePreprocessor.Host = mvcHost;
}
IEnumerable<AspxCSharp.List.ModelProperty> GetModelProperties()
{
return templatePreprocessor.GetModelProperties();
}
AspxCSharp.List.ModelProperty GetFirstModelProperty()
{
return GetModelProperties().First();
}
[Test]
public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets()
{
@ -79,7 +92,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -79,7 +92,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates
<%: Html.ActionLink(""Create"", ""Create"") %>
</p>
<table>
<% foreach (var item in Model) { %>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> |
@ -87,7 +100,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -87,7 +100,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr>
<% } %>
<% } %>
</table>
</body>
</html>
@ -114,7 +127,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -114,7 +127,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates
<%: Html.ActionLink(""Create"", ""Create"") %>
</p>
<table>
<% foreach (var item in Model) { %>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> |
@ -122,7 +135,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -122,7 +135,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr>
<% } %>
<% } %>
</table>
";
Assert.AreEqual(expectedOutput, output);
@ -154,7 +167,7 @@ MyView @@ -154,7 +167,7 @@ MyView
<%: Html.ActionLink(""Create"", ""Create"") %>
</p>
<table>
<% foreach (var item in Model) { %>
<% foreach (var item in Model) { %>
<tr>
<td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> |
@ -162,9 +175,63 @@ MyView @@ -162,9 +175,63 @@ MyView
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr>
<% } %>
<% } %>
</table>
</asp:Content>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasOnePropertyCalledName_ReturnsModelPropertyCalledName()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithOneProperty);
AspxCSharp.List.ModelProperty modelProperty = GetFirstModelProperty();
Assert.AreEqual("Name", modelProperty.Name);
}
[Test]
public void TransformText_ModelHasOnePropertyAndIsPartialView_ReturnsControlWithFormAndHtmlHelpersForModelProperty()
{
CreateViewTemplatePreprocessor();
mvcHost.IsPartialView = true;
Type modelType = typeof(ModelWithOneProperty);
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.ModelWithOneProperty>>"" %>
<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"") %> |
<%: Html.ActionLink(""Details"", ""Details"") %> |
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr>
<% } %>
</table>
";
Assert.AreEqual(expectedOutput, output);
}

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

@ -2,10 +2,13 @@ @@ -2,10 +2,13 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Generic;
using System.Linq;
using AspNet.Mvc.Tests.CodeTemplates.Models;
using AspNet.Mvc.Tests.Helpers;
using CSHtml = ICSharpCode.AspNet.Mvc.CSHtml;
using NUnit.Framework;
using CSHtml = ICSharpCode.AspNet.Mvc.CSHtml;
namespace AspNet.Mvc.Tests.CodeTemplates
{
@ -22,6 +25,16 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -22,6 +25,16 @@ namespace AspNet.Mvc.Tests.CodeTemplates
templatePreprocessor.Host = mvcHost;
}
IEnumerable<CSHtml.List.ModelProperty> GetModelProperties()
{
return templatePreprocessor.GetModelProperties();
}
CSHtml.List.ModelProperty GetFirstModelProperty()
{
return GetModelProperties().First();
}
[Test]
public void GetModelDirective_HostViewDataTypeNameIsMyAppMyModel_ReturnsRazorModelFollowedByIEnumerableMyAppMyModel()
{
@ -79,15 +92,15 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -79,15 +92,15 @@ namespace AspNet.Mvc.Tests.CodeTemplates
@Html.ActionLink(""Create"", ""Create"")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
</table>
</body>
</html>
@ -114,15 +127,15 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -114,15 +127,15 @@ namespace AspNet.Mvc.Tests.CodeTemplates
@Html.ActionLink(""Create"", ""Create"")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
</table>
";
Assert.AreEqual(expectedOutput, output);
@ -156,15 +169,69 @@ namespace AspNet.Mvc.Tests.CodeTemplates @@ -156,15 +169,69 @@ namespace AspNet.Mvc.Tests.CodeTemplates
@Html.ActionLink(""Create"", ""Create"")
</p>
<table>
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink(""Edit"", ""Edit"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
</table>
";
Assert.AreEqual(expectedOutput, output);
}
[Test]
public void GetModelProperties_ModelHasOnePropertyCalledName_ReturnsModelPropertyCalledName()
{
CreateViewTemplatePreprocessor();
mvcHost.ViewDataType = typeof(ModelWithOneProperty);
CSHtml.List.ModelProperty modelProperty = GetFirstModelProperty();
Assert.AreEqual("Name", modelProperty.Name);
}
[Test]
public void TransformText_ModelHasOnePropertyAndIsPartialView_ReturnsControlWithFormAndHtmlHelpersForModelProperty()
{
CreateViewTemplatePreprocessor();
mvcHost.IsPartialView = true;
Type modelType = typeof(ModelWithOneProperty);
mvcHost.ViewDataType = modelType;
mvcHost.ViewDataTypeName = modelType.FullName;
mvcHost.ViewName = "MyView";
string output = templatePreprocessor.TransformText();
string expectedOutput =
@"@model IEnumerable<AspNet.Mvc.Tests.CodeTemplates.Models.ModelWithOneProperty>
<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"") |
@Html.ActionLink(""Details"", ""Details"") |
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr>
}
</table>
";
Assert.AreEqual(expectedOutput, output);

Loading…
Cancel
Save