From d504eb9f1a71b2fa1ec796e31a2e6b9eedb5be31 Mon Sep 17 00:00:00 2001 From: Matt Ward Date: Sun, 21 Aug 2011 14:56:04 +0100 Subject: [PATCH] Set default master page when selecting ASPX view engine in ASP.NET MVC Add View dialog. --- .../Src/AddMvcViewToProjectViewModel.cs | 17 +++++++- .../Src/AddMvcViewToProjectViewModelTests.cs | 43 +++++++++++++++++++ 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs index eb03a0cb63..6aab478118 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Project/Src/AddMvcViewToProjectViewModel.cs @@ -41,6 +41,7 @@ namespace ICSharpCode.AspNet.Mvc CreateModelClassesForSelectedFolder(); CreateCommands(); AddViewEngines(); + SetDefaultMasterPage(); } void CreateModelClassesForSelectedFolder() @@ -98,6 +99,15 @@ namespace ICSharpCode.AspNet.Mvc SelectedViewEngine = viewEngines[0]; } + void SetDefaultMasterPage() + { + if (IsAspxViewEngineSelected) { + MasterPageFile = "~/Views/Shared/Site.Master"; + } else { + MasterPageFile = String.Empty; + } + } + public IEnumerable ViewEngines { get { return viewEngines; } } @@ -107,17 +117,20 @@ namespace ICSharpCode.AspNet.Mvc set { selectedViewEngine = value; viewFileName.TemplateType = selectedViewEngine.TemplateType; - UpdateSelectedViewEngineFlags(); + OnSelectedViewEngineChanged(); } } - void UpdateSelectedViewEngineFlags() + void OnSelectedViewEngineChanged() { IsAspxViewEngineSelected = selectedViewEngine.TemplateType.IsAspx(); IsRazorViewEngineSelected = selectedViewEngine.TemplateType.IsRazor(); + SetDefaultMasterPage(); + OnPropertyChanged(viewModel => viewModel.IsAspxViewEngineSelected); OnPropertyChanged(viewModel => viewModel.IsRazorViewEngineSelected); + OnPropertyChanged(viewModel => viewModel.MasterPageFile); } public bool IsRazorViewEngineSelected { get; private set; } diff --git a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs index 2a828e1722..f903fff3f4 100644 --- a/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs +++ b/src/AddIns/BackendBindings/AspNet.Mvc/Test/Src/AddMvcViewToProjectViewModelTests.cs @@ -652,5 +652,48 @@ namespace AspNet.Mvc.Tests Assert.AreEqual(String.Empty, masterPage); } + + [Test] + public void MasterPageFile_DefaultValue_ReturnsSharedSiteMasterPageFile() + { + CreateViewModel(); + string masterPage = viewModel.MasterPageFile; + + Assert.AreEqual("~/Views/Shared/Site.Master", masterPage); + } + + [Test] + public void MasterPageFile_ViewEngineChangedToRazor_ReturnsEmptyString() + { + CreateViewModel(); + SelectRazorViewEngine(); + string masterPage = viewModel.MasterPageFile; + + Assert.AreEqual(String.Empty, masterPage); + } + + [Test] + public void MasterPageFile_ViewEngineChangedToRazorAndThenBackToAspx_ReturnsSharedSiteMasterPageFile() + { + CreateViewModel(); + SelectRazorViewEngine(); + viewModel.MasterPageFile = "Test"; + SelectAspxViewEngine(); + + string masterPage = viewModel.MasterPageFile; + + Assert.AreEqual("~/Views/Shared/Site.Master", masterPage); + } + + [Test] + public void MasterPageFile_ViewEngineChangedToRazor_PropertyChangedEventFiredForMasterPageFile() + { + CreateViewModel(); + MonitorPropertyChangedEvents(); + SelectRazorViewEngine(); + bool fired = propertyChangedEvents.Contains("MasterPageFile"); + + Assert.IsTrue(fired); + } } }