From 7e2fa745ec52053233d198283f8ab056f2bb33cd Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sun, 27 Nov 2011 13:50:35 +0000 Subject: [PATCH] Generate code for model properties in ASP.NET MVC List T4 templates. --- .../CodeTemplates/AddView/AspxCSharp/List.cs | 194 ++++++++++++++---- .../CodeTemplates/AddView/AspxCSharp/List.tt | 66 +++++- .../CodeTemplates/AddView/CSHTML/List.cs | 176 +++++++++++++--- .../CodeTemplates/AddView/CSHTML/List.tt | 78 ++++++- .../AddView/AspxVisualBasic/List.tt | 65 +++++- .../CodeTemplates/AddView/VBHTML/List.tt | 79 ++++++- .../AspxCSharpListViewTemplateTests.cs | 81 +++++++- .../RazorCSharpListViewTemplateTests.cs | 123 ++++++++--- 8 files changed, 729 insertions(+), 133 deletions(-) diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.cs index 2a4bdcf993..05684c0be2 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/List.cs @@ -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 { 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 { } return String.Empty; } + + List modelProperties; + + List ModelProperties { + get { + if (modelProperties == null) { + modelProperties = new List(GetModelProperties()); + } + return modelProperties; + } + } + + bool ModelHasProperties { + get { return ModelProperties.Count > 0; } + } + + public IEnumerable GetModelProperties() + { + var properties = new List(); + 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 { 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