有時候,咱們的項目涉及到多種風格,咱們能夠經過擴展RazorViewEngine,這樣就能夠保持後臺代碼不發生變化。html
新建類ThemeViewEngine繼承於RazorViewEngineweb
1 public class ThemeViewEngine : RazorViewEngine 2 { 3 public ThemeViewEngine(string theme) 4 { 5 ViewLocationFormats = new[] 6 { 7 "~/Views/Themes/" + theme + "/{1}/{0}.cshtml", 8 "~/Views/Themes/" + theme + "/Shared/{0}.cshtml" 9 }; 10 11 PartialViewLocationFormats = new[] 12 { 13 "~/Views/Themes/" + theme + "/{1}/{0}.cshtml", 14 "~/Views/Themes/" + theme + "/Shared/{0}.cshtml" 15 }; 16 17 AreaViewLocationFormats = new[] 18 { 19 "~Areas/{2}/Views/Themes/" + theme + "/{1}/{0}.cshtml", 20 "~Areas/{2}/Views/Themes/" + theme + "/Shared/{0}.cshtml" 21 }; 22 23 AreaPartialViewLocationFormats = new[] 24 { 25 "~Areas/{2}/Views/Themes/" + theme + "/{1}/{0}.cshtml", 26 "~Areas/{2}/Views/Themes/" + theme + "/Shared/{0}.cshtml" 27 }; 28 } 29 }
Global類中,註冊這種引擎spa
1 //不一樣風格 2 if (!string.IsNullOrEmpty(ConfigurationManager.AppSettings["Theme"])) 3 { 4 var activeTheme = ConfigurationManager.AppSettings["Theme"]; 5 ViewEngines.Engines.Insert(0, new ThemeViewEngine(activeTheme)); 6 }
web.config配置具體風格:code
1 <add key="Theme" value="China" />
項目文件結構:orm
View:htm
America:blog
1 @{ 2 ViewBag.Title = "ShowTheme"; 3 } 4 5 <h2>ShowTheme America</h2>
China:繼承
1 @{ 2 ViewBag.Title = "ShowTheme"; 3 } 4 5 <h2>ShowTheme China</h2>
運行:string
1 public ActionResult ShowTheme() 2 { 3 return View(); 4 }
效果圖:it