Browse Source

Support generating ASP.NET MVC content pages from T4 templates.

pull/18/head
Matt Ward 14 years ago
parent
commit
27924e0199
  1. 11
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Empty.tt
  2. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Empty.tt
  3. 11
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Empty.tt
  4. 8
      src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Empty.tt
  5. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectView.xaml
  6. 12
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs
  7. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHost.cs
  8. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs
  9. 7
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHost.cs
  10. 6
      src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs
  11. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHost.cs
  12. 2
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs
  13. 38
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs
  14. 10
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcTextTemplateHostTests.cs
  15. 34
      src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs

11
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/AspxCSharp/Empty.tt

@ -5,6 +5,17 @@ @@ -5,6 +5,17 @@
<# if (mvcHost.IsPartialView) { #>
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<# } else if(mvcHost.IsContentPage) { #>
<%@ Page Language="C#" MasterPageFile="<#= mvcHost.MasterPageFile #>" Inherits="System.Web.Mvc.ViewPage<#= GetViewPageType() #>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Title" runat="server">
<#= mvcHost.ViewName #>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Main" runat="server">
</asp:Content>
<# } else { #>
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<#= GetViewPageType() #>" %>

8
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/CSharp/CodeTemplates/AddView/CSHTML/Empty.tt

@ -5,6 +5,14 @@ @@ -5,6 +5,14 @@
#>
<# if (mvcHost.IsPartialView) { #>
<# } else if (mvcHost.IsContentPage) { #>
@{
ViewBag.Title = "<#= mvcHost.ViewName #>";
Layout = "<#= mvcHost.MasterPageFile #>";
}
<h2><#= mvcHost.ViewName #></h2>
<# } else { #>
<#= GetModelDirective() #>

11
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/AspxVisualBasic/Empty.tt

@ -5,6 +5,17 @@ @@ -5,6 +5,17 @@
<# If mvcHost.IsPartialView Then #>
<%@ Control Language="VB" Inherits="System.Web.Mvc.ViewUserControl" %>
<# ElseIf mvcHost.IsContentPage Then #>
<%@ Page Language="VB" MasterPageFile="<#= mvcHost.MasterPageFile #>" Inherits="System.Web.Mvc.ViewPage<#= GetViewPageType() #>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Title" runat="server">
<#= mvcHost.ViewName #>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Main" runat="server">
</asp:Content>
<# Else #>
<%@ Page Language="VB" Inherits="System.Web.Mvc.ViewPage<#= GetViewPageType() #>" %>

8
src/AddIns/BackendBindings/AspNet.Mvc/Project/ItemTemplates/VisualBasic/CodeTemplates/AddView/VBHTML/Empty.tt

@ -5,6 +5,14 @@ @@ -5,6 +5,14 @@
#>
<# If mvcHost.IsPartialView Then #>
<# ElseIf mvcHost.IsContentPage Then #>
@Code
ViewData("Title") = "<#= mvcHost.ViewName #>"
Layout = "<#= mvcHost.MasterPageFile #>"
End Code
<h2><#= mvcHost.ViewName #></h2>
<# Else #>
<#= GetModelDirective() #>

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectView.xaml

@ -124,7 +124,7 @@ @@ -124,7 +124,7 @@
Grid.Row="7"
Grid.Column="1"
IsEnabled="{Binding Path=IsContentPage}"
Text="{Binding Path=ContentPage}"/>
Text="{Binding Path=MasterPageFile}"/>
<StackPanel
Orientation="Horizontal"

12
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs

@ -152,12 +152,22 @@ namespace ICSharpCode.AspNet.Mvc @@ -152,12 +152,22 @@ namespace ICSharpCode.AspNet.Mvc
void ConfigureMvcViewGenerator()
{
viewGenerator.IsContentPage = IsContentPage;
viewGenerator.MasterPageFile = GetMasterPageFile();
viewGenerator.ModelClassName = GetModelClassName();
viewGenerator.Project = selectedViewFolder.Project;
viewGenerator.TemplateLanguage = GetTemplateLanguage();
viewGenerator.TemplateType = selectedViewEngine.TemplateType;
}
string GetMasterPageFile()
{
if (IsContentPage) {
return MasterPageFile;
}
return String.Empty;
}
string GetModelClassName()
{
if (IsStronglyTypedView) {
@ -203,7 +213,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -203,7 +213,7 @@ namespace ICSharpCode.AspNet.Mvc
public MvcModelClassViewModel SelectedModelClass { get; set; }
public string ModelClassName { get; set; }
public string ContentPage { get; set; }
public string MasterPageFile { get; set; }
}
}

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcTextTemplateHost.cs

@ -15,6 +15,8 @@ namespace ICSharpCode.AspNet.Mvc @@ -15,6 +15,8 @@ namespace ICSharpCode.AspNet.Mvc
string ViewName { get; set; }
bool IsPartialView { get; set; }
string ViewDataTypeName { get; set; }
bool IsContentPage { get; set; }
string MasterPageFile { get; set; }
// Add Controller properties.
string ControllerName { get; set; }

2
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/IMvcViewFileGenerator.cs

@ -12,6 +12,8 @@ namespace ICSharpCode.AspNet.Mvc @@ -12,6 +12,8 @@ namespace ICSharpCode.AspNet.Mvc
MvcTextTemplateType TemplateType { get; set; }
IMvcProject Project { get; set; }
string ModelClassName { get; set; }
bool IsContentPage { get; set; }
string MasterPageFile { get; set; }
void GenerateFile(MvcViewFileName fileName);
}

7
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcTextTemplateHost.cs

@ -11,6 +11,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -11,6 +11,7 @@ namespace ICSharpCode.AspNet.Mvc
string viewName = String.Empty;
string viewDataTypeName = String.Empty;
string @namespace = String.Empty;
string masterPageFile = String.Empty;
MvcControllerName controllerName = new MvcControllerName();
public MvcTextTemplateHost(
@ -69,5 +70,11 @@ namespace ICSharpCode.AspNet.Mvc @@ -69,5 +70,11 @@ namespace ICSharpCode.AspNet.Mvc
public bool AddActionMethods { get; set; }
public bool IsPartialView { get; set; }
public bool IsContentPage { get; set; }
public string MasterPageFile {
get { return masterPageFile; }
set { masterPageFile = UseEmptyStringIfNull(value); }
}
}
}

6
src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/MvcViewFileGenerator.cs

@ -24,10 +24,13 @@ namespace ICSharpCode.AspNet.Mvc @@ -24,10 +24,13 @@ namespace ICSharpCode.AspNet.Mvc
{
this.textTemplateRepository = textTemplateRepository;
ModelClassName = String.Empty;
MasterPageFile = String.Empty;
}
public MvcTextTemplateType TemplateType { get; set; }
public string ModelClassName { get; set; }
public bool IsContentPage { get; set; }
public string MasterPageFile { get; set; }
public void GenerateFile(MvcViewFileName fileName)
{
@ -36,8 +39,11 @@ namespace ICSharpCode.AspNet.Mvc @@ -36,8 +39,11 @@ namespace ICSharpCode.AspNet.Mvc
protected override void ConfigureHost(IMvcTextTemplateHost host, MvcFileName fileName)
{
host.IsContentPage = IsContentPage;
var viewFileName = fileName as MvcViewFileName;
host.IsPartialView = viewFileName.IsPartialView;
host.MasterPageFile = MasterPageFile;
host.ViewDataTypeName = ModelClassName;
host.ViewName = viewFileName.ViewName;
}

2
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcTextTemplateHost.cs

@ -39,6 +39,8 @@ namespace AspNet.Mvc.Tests.Helpers @@ -39,6 +39,8 @@ namespace AspNet.Mvc.Tests.Helpers
public bool AddActionMethods { get; set; }
public bool IsPartialView { get; set; }
public string ViewDataTypeName { get; set; }
public bool IsContentPage { get; set; }
public string MasterPageFile { get; set; }
public CompilerErrorCollection Errors { get; set; }
}

2
src/AddIns/BackendBindings/AspNet.Mvc/Test/Helpers/FakeMvcViewFileGenerator.cs

@ -13,6 +13,8 @@ namespace AspNet.Mvc.Tests.Helpers @@ -13,6 +13,8 @@ namespace AspNet.Mvc.Tests.Helpers
public MvcTextTemplateType TemplateType { get; set; }
public IMvcProject Project { get; set; }
public string ModelClassName { get; set; }
public bool IsContentPage { get; set; }
public string MasterPageFile { get; set; }
public bool IsGenerateFileCalled;
public MvcViewFileName FileNamePassedToGenerateFile;

38
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs

@ -614,5 +614,43 @@ namespace AspNet.Mvc.Tests @@ -614,5 +614,43 @@ namespace AspNet.Mvc.Tests
Assert.IsTrue(fired);
}
[Test]
public void AddMvcView_IsContentPageIsTrue_IsContentPageIsSetToTrueOnViewGenerator()
{
CreateViewModel();
viewModel.IsContentPage = true;
viewModel.AddMvcView();
bool contentPage = fakeViewGenerator.IsContentPage;
Assert.IsTrue(contentPage);
}
[Test]
public void AddMvcView_ContentPageIsDefinedAndIsContentPageIsTrue_ContentPageIsConfiguredOnViewGenerator()
{
CreateViewModel();
viewModel.IsContentPage = true;
viewModel.MasterPageFile = "~/Views/Shared/Site.Master";
viewModel.AddMvcView();
string masterPage = fakeViewGenerator.MasterPageFile;
Assert.AreEqual("~/Views/Shared/Site.Master", masterPage);
}
[Test]
public void AddMvcView_ContentPageIsDefinedAndIsContentPageIsFalse_ContentPageIsEmptyStringOnViewGenerator()
{
CreateViewModel();
viewModel.IsContentPage = false;
viewModel.MasterPageFile = "~/Views/Shared/Site.Master";
viewModel.AddMvcView();
string masterPage = fakeViewGenerator.MasterPageFile;
Assert.AreEqual(String.Empty, masterPage);
}
}
}

10
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcTextTemplateHostTests.cs

@ -96,5 +96,15 @@ namespace AspNet.Mvc.Tests @@ -96,5 +96,15 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(String.Empty, typeName);
}
[Test]
public void MasterPageFile_SetToNull_ReturnsEmptyString()
{
CreateHost();
host.MasterPageFile = null;
string masterPage = host.MasterPageFile;
Assert.AreEqual(String.Empty, masterPage);
}
}
}

34
src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/MvcViewFileGeneratorTests.cs

@ -238,5 +238,39 @@ namespace AspNet.Mvc.Tests @@ -238,5 +238,39 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(String.Empty, modelClassName);
}
[Test]
public void GenerateFile_IsContentPageIsTrue_IsContentPageIsSetOnMvcTextTemplateHost()
{
CreateGenerator();
generator.IsContentPage = true;
GenerateFile();
bool contentPage = fakeHost.IsContentPage;
Assert.IsTrue(contentPage);
}
[Test]
public void MasterPageFile_DefaultValue_ReturnsEmptyString()
{
CreateGenerator();
string masterPage = generator.MasterPageFile;
Assert.AreEqual(String.Empty, masterPage);
}
[Test]
public void GenerateFile_MasterPageFileIsSet_MasterPageFileIsSetOnMvcTextTemplateHost()
{
CreateGenerator();
generator.IsContentPage = true;
generator.MasterPageFile = "~/Views/Shared/Site.Master";
GenerateFile();
string masterPage = fakeHost.MasterPageFile;
Assert.AreEqual("~/Views/Shared/Site.Master", masterPage);
}
}
}

Loading…
Cancel
Save