我正在爲檢測到的視圖名稱添加移動擴展程序。如何實現「級聯」ViewEngineResults?
下面是當前的代碼:
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
string GroupName = System.Configuration.ConfigurationManager.AppSettings["GROUP"];
return base.FindView(controllerContext, viewName + "_" + GroupName, masterName, useCache);
}
因此,如果路線去SomeController
和應用程序設置說,該組織是「TeamA」(例如),將渲染視圖將是Index_TeamA.cshtml
。
但是,如果沒有Index_TeamA.cshtml
那麼它默認爲Index.cshtml,正如人們所期望的那樣。
(這是因爲有一些由一些球隊所要求的看法有微小變化。)
但是現在我要到另一個層次添加到這個移動版本:
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
string GroupName = System.Configuration.ConfigurationManager.AppSettings["GROUP"];
if (HttpContext.Current.Request.Browser.IsMobileDevice)
GroupName += "_MOB";
return base.FindView(controllerContext, viewName + "_" + GroupName, masterName, useCache);
}
然而,問題是,如果找不到Index_TeamA_MOB.cshtml
,則默認爲Index.cshtml
,實際上我希望它默認爲Index_TeamA.cshtml
。
這很清楚爲什麼發生這種情況,問題是我該如何級聯這個實現?因此,它首先檢查組版本的移動版本(如果檢測到移動瀏覽器),那麼如果沒有回退到組版本,那麼如果沒有,那麼獲取默認視圖?
UPDATE,這裏是版本1
編輯:好吧這會導致一個無限循環明顯。
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
string GroupName = System.Configuration.ConfigurationManager.AppSettings["GROUP"];
if (HttpContext.Current.Request.Browser.IsMobileDevice)
{
var result = ViewEngines.Engines.FindView(controllerContext, viewName + "_" + GroupName + "_MOB", masterName);
if (result != null)
return base.FindView(controllerContext, viewName + "_" + GroupName + "_MOB", masterName, useCache);
}
return base.FindView(controllerContext, viewName + "_" + GroupName, masterName, useCache);
}