asp.net-mvc - ASP.NET MVC 4 移动显示模式停止工作

标签 asp.net-mvc browser mobile overriding asp.net-mvc-4

ASP.NET MVC 4 中的移动显示模式在正常运行大约一小时后停止提供正确的 View ,尽管浏览器覆盖正确检测到被覆盖的移动设备。

回收应用程序池可以暂时解决问题。

新的浏览器覆盖功能正确地允许移动设备查看站点的桌面版本,反之亦然。但是在大约一个小时的正常运行时间之后,不再为移动设备呈现移动 View ;仅呈现默认桌面 Razor 模板。唯一的解决方法是回收应用程序池。

奇怪的是,浏览器覆盖 cookie 继续起作用。高手_Layout.cshtml模板根据 ViewContext.HttpContext.GetOverriddenBrowser().IsMobileDevice 的值正确显示“移动”或“桌面”文本,但仍然呈现错误的 View 。这让我相信问题出在 DisplayModes 上。

有问题的操作没有被缓存:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]

我正在使用 51Degrees 进行移动检测,但我认为这不会影响覆盖的移动检测。这是 DisplayModes 中的错误吗? ASP.NET MVC 4 Beta & Developer Preview 的功能,还是我做错了什么?

这是我的DisplayModes设置在 Application_Start :
DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("iPhone")
{
    ContextCondition = context =>
        context.GetOverriddenBrowser().IsMobileDevice
        && (context.Request.UserAgent.IndexOf("iPhone", StringComparison.OrdinalIgnoreCase) >= 0
        || context.Request.UserAgent.IndexOf("Android", StringComparison.OrdinalIgnoreCase) >= 0
        || !context.Request.Browser.IsMobileDevice)
    });

/*  Looks complicated, but renders Home.iPhone.cshtml if the overriding browser is
    mobile or if the "real" browser is on an iPhone or Android. This falls through
    to the next instance Home.Mobile.cshtml for more basic phones like BlackBerry.
*/

DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("Mobile")
{
    ContextCondition = context =>
        context.GetOverriddenBrowser().IsMobileDevice
});

最佳答案

这是 MVC 4 中的一个已知问题(Codeplex:#280: Multiple DisplayModes - Caching error, will show wrong View)。这将在 MVC 的下一个版本中修复。

同时,您可以在此处安装解决方法包:http://nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes .

对于大多数应用程序,只需安装此软件包即可解决问题。

对于某些自定义注册 View 引擎集合的应用程序,您应该确保引用 Microsoft.Web.Mvc.FixedRazorViewEngine Microsoft.Web.Mvc.FixedWebFormViewEngine , 而不是默认的 View 引擎实现。

关于asp.net-mvc - ASP.NET MVC 4 移动显示模式停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354188/

相关文章:

iphone - 移动开发分发

c# - Telerik DatePicker 在发布时返回 null

javascript - 单击时打开“将链接另存为”对话框

Jquery Mobile : 'pageshow' event fired only at Shift F5(full reload), 但在加载另一个页面或具有不同查询的同一页面时未触发

css - 为什么我的布局在移动设备上向左折叠?

python - 在 Python 程序中嵌入 Web 浏览器

asp.net - ASP.NET MVC 路由的无限 URL 参数

.net - web api 2文件上传错误

javascript - 如何使用 JSON asp.net MVC 同时发送两个数组以进行查看

html - 浏览器重绘和性能