主页在ASP.NET MVC自定义视图引擎中神奇地改变

时间:2013-02-21 00:24:05

标签: asp.net-mvc master-pages viewengine

好的,我已经使用自定义视图引擎继承了此代码。它只是覆盖FindView,以便根据设备返回不同的视图。目前,iPad被检测为移动设备,因此显示移动视图。我的任务是将其更改为桌面视图。

有两个母版页X.masterX.Mobile.master。从代码中,您可以看到它手动将.Mobile添加到移动设备的母版页名称中。我所做的就是为iPad设置isMobilefalse

问题在于,即使它转到其他语句masterNameX(而不是X.Mobile),在使用iPad查看时,返回的视图也会{{ 1}}作为主页面。因此,对于iPad,它最终会显示带有移动主页的桌面视图。桌面和移动版本都很好。这可能发生在何处(以及如何)?

示例操作方法:

X.Mobile.Master

这是viewengine的简化版本:

public ActionResult Index()
{
  return View("Index", "X");
}

1 个答案:

答案 0 :(得分:2)

好的,看完ASP.NET MVC(感谢上帝的开源)后,我可以看到当请求被标记为mobile(controllerContext.HttpContext.Request.Browser.IsMobileDevice == true)时,MVC会尝试viewname.mobile.cshtml(或.aspx) )在尝试viewname.cshtml之前默认情况下。对于母版页也是如此。

在我的情况下,因为确实有一个masterpage.mobile,它正在呈现。至于视图,因为移动版本位于一个单独的文件夹中,所以它没有被拾取,而是回到正常的viewname.cshtml。

这整个调查让我有点兴奋,这促使我在my blog更详细地分享我的发现。