好的我已经继承了这个代码与自定义视图引擎。它所做的是覆盖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