Browse Source

Support defining the primary place holder ID when generating ASP.NET MVC ASPX pages.

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

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

@ -12,10 +12,9 @@ @@ -12,10 +12,9 @@
<#= mvcHost.ViewName #>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Main" runat="server">
<asp:Content ID="Content2" ContentPlaceHolderID="<#= mvcHost.PrimaryContentPlaceHolderID #>" runat="server">
</asp:Content>
<# } else { #>
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<#= GetViewPageType() #>" %>

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

@ -12,10 +12,9 @@ @@ -12,10 +12,9 @@
<#= mvcHost.ViewName #>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="Main" runat="server">
<asp:Content ID="Content2" ContentPlaceHolderID="<#= mvcHost.PrimaryContentPlaceHolderID #>" runat="server">
</asp:Content>
<# Else #>
<%@ Page Language="VB" Inherits="System.Web.Mvc.ViewPage<#= GetViewPageType() #>" %>

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

@ -32,6 +32,7 @@ @@ -32,6 +32,7 @@
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
@ -126,12 +127,24 @@ @@ -126,12 +127,24 @@
IsEnabled="{Binding Path=IsContentPage}"
Text="{Binding Path=MasterPageFile}"/>
<Label
Grid.Row="8"
Visibility="{Binding Path=IsAspxViewEngineSelected, Converter={StaticResource BoolToVisibility}}"
IsEnabled="{Binding Path=IsContentPage}"
Content="Main Content ID:"/>
<TextBox
Grid.Row="8"
Grid.Column="1"
Visibility="{Binding Path=IsAspxViewEngineSelected, Converter={StaticResource BoolToVisibility}}"
IsEnabled="{Binding Path=IsContentPage}"
Text="{Binding Path=PrimaryContentPlaceHolderId}"/>
<StackPanel
Orientation="Horizontal"
HorizontalAlignment="Right"
Margin="4"
Grid.ColumnSpan="2"
Grid.Row="9">
Grid.Row="10">
<Button
Margin="2, 0"
Content="_Add"

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

@ -37,6 +37,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -37,6 +37,7 @@ namespace ICSharpCode.AspNet.Mvc
this.viewGenerator = viewGenerator;
this.viewFileName.Folder = selectedViewFolder.Path;
this.ModelClassName = String.Empty;
this.PrimaryContentPlaceHolderId = "Main";
CreateModelClassesForSelectedFolder();
CreateCommands();
@ -168,6 +169,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -168,6 +169,7 @@ namespace ICSharpCode.AspNet.Mvc
viewGenerator.IsContentPage = IsContentPage;
viewGenerator.MasterPageFile = GetMasterPageFile();
viewGenerator.ModelClassName = GetModelClassName();
viewGenerator.PrimaryContentPlaceHolderId = GetPrimaryContentPlaceHolderId();
viewGenerator.Project = selectedViewFolder.Project;
viewGenerator.TemplateLanguage = GetTemplateLanguage();
viewGenerator.TemplateType = selectedViewEngine.TemplateType;
@ -192,6 +194,14 @@ namespace ICSharpCode.AspNet.Mvc @@ -192,6 +194,14 @@ namespace ICSharpCode.AspNet.Mvc
return String.Empty;
}
string GetPrimaryContentPlaceHolderId()
{
if (IsContentPage) {
return PrimaryContentPlaceHolderId;
}
return String.Empty;
}
MvcTextTemplateLanguage GetTemplateLanguage()
{
return selectedViewFolder.GetTemplateLanguage();
@ -227,6 +237,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -227,6 +237,7 @@ namespace ICSharpCode.AspNet.Mvc
public MvcModelClassViewModel SelectedModelClass { get; set; }
public string ModelClassName { get; set; }
public string MasterPageFile { get; set; }
public string PrimaryContentPlaceHolderId { get; set; }
}
}

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

@ -17,6 +17,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -17,6 +17,7 @@ namespace ICSharpCode.AspNet.Mvc
string ViewDataTypeName { get; set; }
bool IsContentPage { get; set; }
string MasterPageFile { get; set; }
string PrimaryContentPlaceHolderID { get; set; }
// Add Controller properties.
string ControllerName { get; set; }

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

@ -14,6 +14,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -14,6 +14,7 @@ namespace ICSharpCode.AspNet.Mvc
string ModelClassName { get; set; }
bool IsContentPage { get; set; }
string MasterPageFile { get; set; }
string PrimaryContentPlaceHolderId { get; set; }
void GenerateFile(MvcViewFileName fileName);
}

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

@ -12,6 +12,7 @@ namespace ICSharpCode.AspNet.Mvc @@ -12,6 +12,7 @@ namespace ICSharpCode.AspNet.Mvc
string viewDataTypeName = String.Empty;
string @namespace = String.Empty;
string masterPageFile = String.Empty;
string primaryContentPlaceHolderID = String.Empty;
MvcControllerName controllerName = new MvcControllerName();
public MvcTextTemplateHost(
@ -76,5 +77,10 @@ namespace ICSharpCode.AspNet.Mvc @@ -76,5 +77,10 @@ namespace ICSharpCode.AspNet.Mvc
get { return masterPageFile; }
set { masterPageFile = UseEmptyStringIfNull(value); }
}
public string PrimaryContentPlaceHolderID {
get { return primaryContentPlaceHolderID; }
set { primaryContentPlaceHolderID = UseEmptyStringIfNull(value); }
}
}
}

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

@ -23,14 +23,17 @@ namespace ICSharpCode.AspNet.Mvc @@ -23,14 +23,17 @@ namespace ICSharpCode.AspNet.Mvc
: base(hostFactory)
{
this.textTemplateRepository = textTemplateRepository;
ModelClassName = String.Empty;
MasterPageFile = String.Empty;
PrimaryContentPlaceHolderId = String.Empty;
}
public MvcTextTemplateType TemplateType { get; set; }
public string ModelClassName { get; set; }
public bool IsContentPage { get; set; }
public string MasterPageFile { get; set; }
public string PrimaryContentPlaceHolderId { get; set; }
public void GenerateFile(MvcViewFileName fileName)
{
@ -40,11 +43,12 @@ namespace ICSharpCode.AspNet.Mvc @@ -40,11 +43,12 @@ namespace ICSharpCode.AspNet.Mvc
protected override void ConfigureHost(IMvcTextTemplateHost host, MvcFileName fileName)
{
host.IsContentPage = IsContentPage;
host.MasterPageFile = MasterPageFile;
host.PrimaryContentPlaceHolderID = PrimaryContentPlaceHolderId;
host.ViewDataTypeName = ModelClassName;
var viewFileName = fileName as MvcViewFileName;
host.IsPartialView = viewFileName.IsPartialView;
host.MasterPageFile = MasterPageFile;
host.ViewDataTypeName = ModelClassName;
host.ViewName = viewFileName.ViewName;
}

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

@ -41,6 +41,7 @@ namespace AspNet.Mvc.Tests.Helpers @@ -41,6 +41,7 @@ namespace AspNet.Mvc.Tests.Helpers
public string ViewDataTypeName { get; set; }
public bool IsContentPage { get; set; }
public string MasterPageFile { get; set; }
public string PrimaryContentPlaceHolderID { get; set; }
public CompilerErrorCollection Errors { get; set; }
}

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

@ -15,6 +15,7 @@ namespace AspNet.Mvc.Tests.Helpers @@ -15,6 +15,7 @@ namespace AspNet.Mvc.Tests.Helpers
public string ModelClassName { get; set; }
public bool IsContentPage { get; set; }
public string MasterPageFile { get; set; }
public string PrimaryContentPlaceHolderId { get; set; }
public bool IsGenerateFileCalled;
public MvcViewFileName FileNamePassedToGenerateFile;

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

@ -695,5 +695,40 @@ namespace AspNet.Mvc.Tests @@ -695,5 +695,40 @@ namespace AspNet.Mvc.Tests
Assert.IsTrue(fired);
}
[Test]
public void PrimaryContentPlaceHolderId_DefaultValue_ReturnsMain()
{
CreateViewModel();
string id = viewModel.PrimaryContentPlaceHolderId;
Assert.AreEqual("Main", id);
}
[Test]
public void AddMvcView_PrimaryContentPlaceHolderIdIsDefined_PrimaryContentPlaceHolderIdIsSetOnViewGenerator()
{
CreateViewModel();
viewModel.IsContentPage = true;
viewModel.PrimaryContentPlaceHolderId = "Test";
viewModel.AddMvcView();
string id = fakeViewGenerator.PrimaryContentPlaceHolderId;
Assert.AreEqual("Test", id);
}
[Test]
public void AddMvcView_PrimaryContentPlaceHolderIdIsDefinedAndIsContentPageIsFalse_PrimaryContentPlaceHolderIdIsEmptyStringOnViewGenerator()
{
CreateViewModel();
viewModel.IsContentPage = false;
viewModel.PrimaryContentPlaceHolderId = "Test";
viewModel.AddMvcView();
string id = fakeViewGenerator.PrimaryContentPlaceHolderId;
Assert.AreEqual(String.Empty, id);
}
}
}

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

@ -106,5 +106,15 @@ namespace AspNet.Mvc.Tests @@ -106,5 +106,15 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual(String.Empty, masterPage);
}
[Test]
public void PrimaryContentPlaceHolderID_SetToNull_ReturnsEmptyString()
{
CreateHost();
host.PrimaryContentPlaceHolderID = null;
string id = host.PrimaryContentPlaceHolderID;
Assert.AreEqual(String.Empty, id);
}
}
}

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

@ -272,5 +272,27 @@ namespace AspNet.Mvc.Tests @@ -272,5 +272,27 @@ namespace AspNet.Mvc.Tests
Assert.AreEqual("~/Views/Shared/Site.Master", masterPage);
}
[Test]
public void PrimaryContentPlaceHolderId_DefaultValue_ReturnsEmptyString()
{
CreateGenerator();
string id = generator.PrimaryContentPlaceHolderId;
Assert.AreEqual(String.Empty, id);
}
[Test]
public void GenerateFile_PrimaryContentPlaceHolderIdIsSet_PrimaryContentPlaceHolderIdIsSetOnMvcTextTemplateHost()
{
CreateGenerator();
generator.IsContentPage = true;
generator.PrimaryContentPlaceHolderId = "MainContent";
GenerateFile();
string id = fakeHost.PrimaryContentPlaceHolderID;
Assert.AreEqual("MainContent", id);
}
}
}

Loading…
Cancel
Save