好的我已經繼承了這個代碼與自定義視圖引擎。它所做的是覆蓋FindView
,以便返回基於設備的不同視圖。目前,iPad被檢測爲移動設備,因此顯示移動視圖。我的任務是將其更改爲桌面視圖。母版頁在ASP.NET MVC自定義視圖引擎奇蹟般地變化
有兩個主頁面X.master
和X.Mobile.master
。從代碼中,您可以看到它手動將.Mobile
添加到移動設備的主頁面名稱。我所做的只是將isMobile
設置爲false
。
的問題是,即使它去else語句與masterName
是X
(而不是X.Mobile
),使用iPad查看時,被返回的觀點有X.Mobile.Master
它的母版頁。因此,對於iPad,它最終會顯示帶有移動主頁的桌面視圖。桌面和移動版本都很好。哪裏(以及如何)這可能發生?
樣本的操作方法:
public ActionResult Index()
{
return View("Index", "X");
}
這裏的視圖引擎的簡化版本:
class MobileViewEngine : FixedWebFormViewEngine
{
public override ViewEngineResult FindView(
ControllerContext controllerContext,
string viewName,
string masterName,
bool useCache
)
{
ViewEngineResult result;
bool isMobile =
controllerContext.HttpContext.Request.Browser.IsMobileDevice;
if (isiPad(controllerContext.HttpContext.Request))
{
isMobile = false;
}
if (isMobile)
{
masterName = masterName + ".Mobile";
string viewPathAndName = "M/" + viewName;
//Mobile view retrieved from cache
result = base.FindView(
controllerContext,
viewPathAndName,
masterName,
true
);
if (result == null || result.View == null)
{
//Mobile view retrieved, no cache
result = base.FindView(
controllerContext,
viewPathAndName,
masterName,
false
);
}
}
else
{
//desktop view retrieved
result = base.FindView(
controllerContext,
viewName,
masterName,
false
);
}
}
}
我會搜索你的代碼庫以用於IsMobileDevice的其他用途。 – 2013-02-21 07:29:36
不幸的是,這並沒有導致任何可能影響這個問題的事情 – Hossein 2013-02-21 23:46:47