模版化的核心是定制ViewEngine。完整的模板化必須實現3個功能:1.網站的多套模版(razor)支持 2.模版的多樣式(style)支持。 3.按需實現模版:沒有實現的加載默認模版。 我們除了要達到上述3個功能目標,還必須不能影響MVC默認的項目目錄和文件布局以及開放工具的智能提示,這樣才是真正可用的。依慣例,喜歡自己研究的直接看Nop的源代碼,喜歡直接看核心代碼和演示Demo繼續。
基礎准備
1.新建一個空白ASP.NET應用程序,添加MVC引用。添加必要的Content、Scripts、Views/Shared目錄和_ViewStart.cshtml和_Layout.cshtml文件。
2.添加Themes目錄用於存放不同模版,每個模版一個目錄,目錄中的結構除沒有Controllers、Models等目錄外,其他同網站根目錄一樣布局,按需按需添加Content、Views等文件夾等。
3.添加Blog目錄,在Views中重寫Index.cshtml,Content中設置了不同的樣式。
4.添加Cms目錄,只在Content中設置了不同的樣式。
1.添加ThemeManager文件用於配置模版和樣式。
實際使用中,提供換膚預覽時我們可以使用cookie和url參數配合。否則,將配置存儲到數據庫后其他存儲中,通過修改配置切換模版和樣式。為了便於演示這里只使用url參數來改變首頁的模版和樣式。
2.添加ThemeViewEngine文件。
根據ThemeManager中獲取到的配置嘗試加載模版文件,如果文件不存在,則加載默認模版文件。
3.在Global.ascx中配置ThemeViewEngine。
演示:
1.默認模版+默認樣式
2.默認模版+其他樣式
3.Blog模版+Blog默認樣式
4.Blog模版+Blog其他樣式
5.默認模版+Cms默認樣式
6.默認模版+Cms其他樣式