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 @@
namespace ICSharpCode.AspNet.Mvc.AspxCSharp { namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
using ICSharpCode.AspNet.Mvc; using ICSharpCode.AspNet.Mvc;
using System.Collections.Generic;
using System.Reflection;
using System; using System;
@ -18,12 +20,17 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue; 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 { MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; } get { return (MvcTextTemplateHost)Host; }
} }
public class ModelProperty
{
public string Name { get; set; }
}
public string GetViewPageType() public string GetViewPageType()
{ {
string viewDataTypeName = MvcHost.ViewDataTypeName; string viewDataTypeName = MvcHost.ViewDataTypeName;
@ -32,6 +39,35 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
} }
return String.Empty; 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 default
#line hidden #line hidden
@ -49,92 +85,92 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
public virtual string TransformText() { public virtual string TransformText() {
this.GenerationEnvironment = null; 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) { if (MvcHost.IsPartialView) {
#line default #line default
#line hidden #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"); this.Write("<%@ Control Language=\"C#\" Inherits=\"System.Web.Mvc.ViewUserControl<IEnumerable");
#line default #line default
#line hidden #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() )); this.Write(this.ToStringHelper.ToStringWithCulture( GetViewPageType() ));
#line default #line default
#line hidden #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"); this.Write(">\" %>\r\n\r\n");
#line default #line default
#line hidden #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) { } else if (MvcHost.IsContentPage) {
#line default #line default
#line hidden #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=\""); this.Write("<%@ Page Language=\"C#\" MasterPageFile=\"");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.MasterPageFile ));
#line default #line default
#line hidden #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"); this.Write("\" Inherits=\"System.Web.Mvc.ViewPage<IEnumerable");
#line default #line default
#line hidden #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() )); this.Write(this.ToStringHelper.ToStringWithCulture( GetViewPageType() ));
#line default #line default
#line hidden #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" + this.Write(">\" %>\r\n\r\n<asp:Content ID=\"Content1\" ContentPlaceHolderID=\"Title\" runat=\"server\">\r" +
"\n"); "\n");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default #line default
#line hidden #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=\""); this.Write("\r\n</asp:Content>\r\n\r\n<asp:Content ID=\"Content2\" ContentPlaceHolderID=\"");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.PrimaryContentPlaceHolderID ));
#line default #line default
#line hidden #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"); this.Write("\" runat=\"server\">\r\n");
#line default #line default
#line hidden #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"); PushIndent("\t");
} else { } else {
@ -143,37 +179,37 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default #line default
#line hidden #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"); this.Write("<%@ Page Language=\"C#\" Inherits=\"System.Web.Mvc.ViewPage<IEnumerable");
#line default #line default
#line hidden #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() )); this.Write(this.ToStringHelper.ToStringWithCulture( GetViewPageType() ));
#line default #line default
#line hidden #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>"); 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 default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default #line default
#line hidden #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"); this.Write("</title>\r\n\t</head>\r\n\t<body>\r\n");
#line default #line default
#line hidden #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"); PushIndent("\t\t");
} }
@ -182,27 +218,99 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default #line default
#line hidden #line hidden
#line 30 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt" #line 32 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
this.Write(@"<p> this.Write("<p>\r\n\t<%: Html.ActionLink(\"Create\", \"Create\") %>\r\n</p>\r\n<table>\r\n");
<%: Html.ActionLink(""Create"", ""Create"") %>
</p> #line default
<table> #line hidden
<% foreach (var item in Model) { %>
<tr> #line 36 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\List.tt"
<td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> | if (ModelHasProperties) {
<%: Html.ActionLink(""Details"", ""Details"") %> | foreach (ModelProperty modelProperty in ModelProperties) {
<%: Html.ActionLink(""Delete"", ""Delete"") %>
</td>
</tr> #line default
<% } %> #line hidden
</table>
"); #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 default
#line hidden #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) { if (MvcHost.IsPartialView) {
// Do nothing. // Do nothing.
@ -213,13 +321,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default #line default
#line hidden #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"); this.Write("</asp:Content>\r\n");
#line default #line default
#line hidden #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 { } else {
PopIndent(); PopIndent();
@ -228,13 +336,13 @@ namespace ICSharpCode.AspNet.Mvc.AspxCSharp {
#line default #line default
#line hidden #line hidden
#line 55 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\AspxCSharp\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"); this.Write("\t</body>\r\n</html>\r\n");
#line default #line default
#line hidden #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 #line default

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

@ -1,5 +1,7 @@
<#@ template language="C#" HostSpecific="true" #> <#@ template language="C#" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #> <#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<# if (MvcHost.IsPartialView) { #> <# if (MvcHost.IsPartialView) { #>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<#= GetViewPageType() #>>" %> <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<#= GetViewPageType() #>>" %>
@ -31,15 +33,41 @@
<%: Html.ActionLink("Create", "Create") %> <%: Html.ActionLink("Create", "Create") %>
</p> </p>
<table> <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> <tr>
<#
if (ModelHasProperties) {
foreach (ModelProperty modelProperty in ModelProperties) {
#>
<td>
<%: Html.DisplayFor(model => model.<#= modelProperty.Name #>) %>
</td>
<#
}
}
#>
<td> <td>
<%: Html.ActionLink("Edit", "Edit") %> | <%: Html.ActionLink("Edit", "Edit") %> |
<%: Html.ActionLink("Details", "Details") %> | <%: Html.ActionLink("Details", "Details") %> |
<%: Html.ActionLink("Delete", "Delete") %> <%: Html.ActionLink("Delete", "Delete") %>
</td> </td>
</tr> </tr>
<% } %> <% } %>
</table> </table>
<# <#
if (MvcHost.IsPartialView) { if (MvcHost.IsPartialView) {
@ -60,6 +88,11 @@
get { return (MvcTextTemplateHost)Host; } get { return (MvcTextTemplateHost)Host; }
} }
public class ModelProperty
{
public string Name { get; set; }
}
public string GetViewPageType() public string GetViewPageType()
{ {
string viewDataTypeName = MvcHost.ViewDataTypeName; string viewDataTypeName = MvcHost.ViewDataTypeName;
@ -68,4 +101,33 @@
} }
return String.Empty; 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 @@
namespace ICSharpCode.AspNet.Mvc.CSHtml { namespace ICSharpCode.AspNet.Mvc.CSHtml {
using ICSharpCode.AspNet.Mvc; using ICSharpCode.AspNet.Mvc;
using System.Collections.Generic;
using System.Reflection;
using System; using System;
@ -18,12 +20,17 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
private global::Microsoft.VisualStudio.TextTemplating.ITextTemplatingEngineHost hostValue; 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 { MvcTextTemplateHost MvcHost {
get { return (MvcTextTemplateHost)Host; } get { return (MvcTextTemplateHost)Host; }
} }
public class ModelProperty
{
public string Name { get; set; }
}
public string GetModelDirective() public string GetModelDirective()
{ {
string viewDataTypeName = MvcHost.ViewDataTypeName; string viewDataTypeName = MvcHost.ViewDataTypeName;
@ -32,6 +39,35 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
} }
return String.Empty; 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 default
#line hidden #line hidden
@ -49,19 +85,19 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
public virtual string TransformText() { public virtual string TransformText() {
this.GenerationEnvironment = null; 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() )); this.Write(this.ToStringHelper.ToStringWithCulture( GetModelDirective() ));
#line default #line default
#line hidden #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"); this.Write("\r\n\r\n");
#line default #line default
#line hidden #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) { if (MvcHost.IsPartialView) {
// Do nothing. // Do nothing.
@ -71,49 +107,49 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default #line default
#line hidden #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 = \""); this.Write("@{\r\n\tViewBag.Title = \"");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default #line default
#line hidden #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 = \""); this.Write("\";\r\n\tLayout = \"");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.MasterPageFile ));
#line default #line default
#line hidden #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>"); this.Write("\";\r\n}\r\n\r\n<h2>");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default #line default
#line hidden #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"); this.Write("</h2>\r\n\r\n");
#line default #line default
#line hidden #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 { } else {
@ -121,25 +157,25 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default #line default
#line hidden #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>"); this.Write("<!DOCTYPE html>\r\n<html>\r\n\t<head runat=\"server\">\r\n\t\t<title>");
#line default #line default
#line hidden #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 )); this.Write(this.ToStringHelper.ToStringWithCulture( MvcHost.ViewName ));
#line default #line default
#line hidden #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"); this.Write("</title>\r\n\t</head>\r\n\t<body>\r\n");
#line default #line default
#line hidden #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"); PushIndent("\t\t");
} }
@ -148,27 +184,99 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default #line default
#line hidden #line hidden
#line 31 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt" #line 33 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
this.Write(@"<p> this.Write("<p>\r\n\t@Html.ActionLink(\"Create\", \"Create\")\r\n</p>\r\n<table>\r\n");
@Html.ActionLink(""Create"", ""Create"")
</p> #line default
<table> #line hidden
@foreach (var item in Model) {
<tr> #line 37 "D:\projects\dotnet\SharpDevelop.AspNetMvc\src\AddIns\BackendBindings\AspNet.Mvc\Project\ItemTemplates\CSharp\CodeTemplates\AddView\CSHTML\List.tt"
<td>
@Html.ActionLink(""Edit"", ""Edit"") | if (ModelHasProperties) {
@Html.ActionLink(""Details"", ""Details"") | foreach (ModelProperty modelProperty in ModelProperties) {
@Html.ActionLink(""Delete"", ""Delete"")
</td>
</tr> #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 default
#line hidden #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) { if (MvcHost.IsPartialView) {
// Do nothing. // Do nothing.
@ -179,13 +287,13 @@ namespace ICSharpCode.AspNet.Mvc.CSHtml {
#line default #line default
#line hidden #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"); this.Write("\t</body>\r\n</html>\r\n");
#line default #line default
#line hidden #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 #line default

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

@ -1,5 +1,7 @@
<#@ template language="C#" HostSpecific="true" #> <#@ template language="C#" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #> <#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<#@ output extension=".cshtml" #> <#@ output extension=".cshtml" #>
<#= GetModelDirective() #> <#= GetModelDirective() #>
@ -32,15 +34,41 @@
@Html.ActionLink("Create", "Create") @Html.ActionLink("Create", "Create")
</p> </p>
<table> <table>
@foreach (var item in Model) { <#
<tr> if (ModelHasProperties) {
<td> foreach (ModelProperty modelProperty in ModelProperties) {
@Html.ActionLink("Edit", "Edit") | #>
@Html.ActionLink("Details", "Details") | <tr>
@Html.ActionLink("Delete", "Delete") <th>
</td> @Html.LabelFor(model => model.<#= modelProperty.Name #>)
</tr> </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> </table>
<# <#
if (MvcHost.IsPartialView) { if (MvcHost.IsPartialView) {
@ -56,6 +84,11 @@
get { return (MvcTextTemplateHost)Host; } get { return (MvcTextTemplateHost)Host; }
} }
public class ModelProperty
{
public string Name { get; set; }
}
public string GetModelDirective() public string GetModelDirective()
{ {
string viewDataTypeName = MvcHost.ViewDataTypeName; string viewDataTypeName = MvcHost.ViewDataTypeName;
@ -64,4 +97,33 @@
} }
return String.Empty; 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 @@
<#@ template language="VB" HostSpecific="true" #> <#@ template language="VB" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #> <#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="Microsoft.VisualBasic.Constants" #> <#@ import namespace="Microsoft.VisualBasic.Constants" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<# If MvcHost.IsPartialView Then #> <# If MvcHost.IsPartialView Then #>
<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl<#= GetViewPageType() #>" %> <%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl<#= GetViewPageType() #>" %>
@ -32,15 +34,41 @@
<%: Html.ActionLink("Create", "Create") %> <%: Html.ActionLink("Create", "Create") %>
</p> </p>
<table> <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> <tr>
<#
If ModelHasProperties Then
For Each modelProperty As ModelProperty in ModelProperties
#>
<td>
@Html.DisplayFor(model => model.<#= modelProperty.Name #>)
</td>
<#
Next
End If
#>
<td> <td>
<%: Html.ActionLink("Edit", "Edit") %> | <%: Html.ActionLink("Edit", "Edit") %> |
<%: Html.ActionLink("Details", "Details") %> | <%: Html.ActionLink("Details", "Details") %> |
<%: Html.ActionLink("Delete", "Delete") %> <%: Html.ActionLink("Delete", "Delete") %>
</td> </td>
</tr> </tr>
<% Next %> <% Next %>
</table> </table>
<# <#
If MvcHost.IsPartialView Then If MvcHost.IsPartialView Then
@ -63,6 +91,10 @@
End Get End Get
End Property End Property
Public Class ModelProperty
Public Property Name As String
End Class
Public Function GetViewPageType() As String Public Function GetViewPageType() As String
Dim viewDataTypeName As String = MvcHost.ViewDataTypeName Dim viewDataTypeName As String = MvcHost.ViewDataTypeName
If Not String.IsNullOrEmpty(viewDataTypeName) Then If Not String.IsNullOrEmpty(viewDataTypeName) Then
@ -70,4 +102,33 @@
End If End If
Return String.Empty Return String.Empty
End Function 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 @@
<#@ template language="VB" HostSpecific="true" #> <#@ template language="VB" HostSpecific="true" #>
<#@ import namespace="ICSharpCode.AspNet.Mvc" #> <#@ import namespace="ICSharpCode.AspNet.Mvc" #>
<#@ import namespace="Microsoft.VisualBasic.Constants" #> <#@ import namespace="Microsoft.VisualBasic.Constants" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Reflection" #>
<#@ output extension=".vbhtml" #> <#@ output extension=".vbhtml" #>
<#= GetModelDirective() #> <#= GetModelDirective() #>
@ -33,15 +35,41 @@ End Code
@Html.ActionLink("Create", "Create") @Html.ActionLink("Create", "Create")
</p> </p>
<table> <table>
@For Each item in Model <#
@<tr> If ModelHasProperties Then
<td> For Each modelProperty As ModelProperty in ModelProperties
@Html.ActionLink("Edit", "Edit") | #>
@Html.ActionLink("Details", "Details") | <tr>
@Html.ActionLink("Delete", "Delete") <th>
</td> @Html.LabelFor(Function(model) model.<#= modelProperty.Name #>)
</tr> </th>
Next <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> </table>
<# <#
If MvcHost.IsPartialView Then If MvcHost.IsPartialView Then
@ -59,6 +87,10 @@ End Code
End Get End Get
End Property End Property
Public Class ModelProperty
Public Property Name As String
End Class
Function GetModelDirective() As String Function GetModelDirective() As String
Dim viewDataTypeName As String = MvcHost.ViewDataTypeName Dim viewDataTypeName As String = MvcHost.ViewDataTypeName
If Not String.IsNullOrEmpty(viewDataTypeName) Then If Not String.IsNullOrEmpty(viewDataTypeName) Then
@ -66,4 +98,33 @@ End Code
End If End If
Return String.Empty Return String.Empty
End Function 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 @@
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt) // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System; using System;
using System.Collections.Generic;
using System.Linq;
using AspNet.Mvc.Tests.CodeTemplates.Models; using AspNet.Mvc.Tests.CodeTemplates.Models;
using AspNet.Mvc.Tests.Helpers; using AspNet.Mvc.Tests.Helpers;
using AspxCSharp = ICSharpCode.AspNet.Mvc.AspxCSharp;
using NUnit.Framework; using NUnit.Framework;
using AspxCSharp = ICSharpCode.AspNet.Mvc.AspxCSharp;
namespace AspNet.Mvc.Tests.CodeTemplates namespace AspNet.Mvc.Tests.CodeTemplates
{ {
@ -22,6 +25,16 @@ namespace AspNet.Mvc.Tests.CodeTemplates
templatePreprocessor.Host = mvcHost; templatePreprocessor.Host = mvcHost;
} }
IEnumerable<AspxCSharp.List.ModelProperty> GetModelProperties()
{
return templatePreprocessor.GetModelProperties();
}
AspxCSharp.List.ModelProperty GetFirstModelProperty()
{
return GetModelProperties().First();
}
[Test] [Test]
public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets() public void GetViewPageType_HostViewDataTypeNameIsMyAppMyModel_ReturnsMyAppMyModelSurroundedByAngleBrackets()
{ {
@ -79,7 +92,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates
<%: Html.ActionLink(""Create"", ""Create"") %> <%: Html.ActionLink(""Create"", ""Create"") %>
</p> </p>
<table> <table>
<% foreach (var item in Model) { %> <% foreach (var item in Model) { %>
<tr> <tr>
<td> <td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> | <%: Html.ActionLink(""Edit"", ""Edit"") %> |
@ -87,7 +100,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates
<%: Html.ActionLink(""Delete"", ""Delete"") %> <%: Html.ActionLink(""Delete"", ""Delete"") %>
</td> </td>
</tr> </tr>
<% } %> <% } %>
</table> </table>
</body> </body>
</html> </html>
@ -114,7 +127,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates
<%: Html.ActionLink(""Create"", ""Create"") %> <%: Html.ActionLink(""Create"", ""Create"") %>
</p> </p>
<table> <table>
<% foreach (var item in Model) { %> <% foreach (var item in Model) { %>
<tr> <tr>
<td> <td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> | <%: Html.ActionLink(""Edit"", ""Edit"") %> |
@ -122,7 +135,7 @@ namespace AspNet.Mvc.Tests.CodeTemplates
<%: Html.ActionLink(""Delete"", ""Delete"") %> <%: Html.ActionLink(""Delete"", ""Delete"") %>
</td> </td>
</tr> </tr>
<% } %> <% } %>
</table> </table>
"; ";
Assert.AreEqual(expectedOutput, output); Assert.AreEqual(expectedOutput, output);
@ -154,7 +167,7 @@ MyView
<%: Html.ActionLink(""Create"", ""Create"") %> <%: Html.ActionLink(""Create"", ""Create"") %>
</p> </p>
<table> <table>
<% foreach (var item in Model) { %> <% foreach (var item in Model) { %>
<tr> <tr>
<td> <td>
<%: Html.ActionLink(""Edit"", ""Edit"") %> | <%: Html.ActionLink(""Edit"", ""Edit"") %> |
@ -162,9 +175,63 @@ MyView
<%: Html.ActionLink(""Delete"", ""Delete"") %> <%: Html.ActionLink(""Delete"", ""Delete"") %>
</td> </td>
</tr> </tr>
<% } %> <% } %>
</table> </table>
</asp:Content> </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); Assert.AreEqual(expectedOutput, output);
} }

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

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

Loading…
Cancel
Save