MVC 預設視圖引擎管理器無法滿足「用戶自選 Skin」需求(如 BBS、多用戶 Blog)。本文實作 SelectViewEngine,讓用戶透過選單切換 Skin,選擇儲存於 Cookie,用戶可控制保留時間。
ViewEngine,提供 AutoViewEngine 管理多引擎。ISelectViewEngine 介面,擴充 Name 屬性標識唯一引擎名稱。WebFormViewEngine 實作 ISelectViewEngine,動態構建視圖搜尋路徑:public SelectWebFormViewEngine(string name) {
Name = name;
MasterLocationFormats = new[] {
"~/skins/" + Name + "/{1}/{0}.master",
"~/skins/" + Name + "/shared/{0}.master"
};
ViewLocationFormats = new[] {
"~/skins/" + Name + "/{1}/{0}.aspx",
"~/skins/" + Name + "/{1}/{0}.ascx",
"~/skins/" + Name + "/shared/{0}.aspx",
"~/skins/" + Name + "/shared/{0}.ascx"
};
PartialViewLocationFormats = ViewLocationFormats;
}
透過 SelectViewEngine 管理一組可選引擎,根據 Cookie 中的 Skin 名稱動態選擇對應引擎解析視圖,實現用戶級 Skin 切換。