好的,我已经使用自定义视图引擎继承了此代码。它所做的只是覆盖FindView
,以便根据设备返回不同的视图。目前,iPad 被检测为移动设备,因此会显示移动视图。我的任务是将其更改为桌面视图。
有两个母版页X.master
和X.Mobile.master
. 从代码中,您可以看到它手动添加.Mobile
到移动设备的母版页名称。我所做的只是isMobile
为false
iPad 设置。
问题是,即使它使用 is(而不是 )进入 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
);
}
}
}