4

您好我有一个 MVC 3 应用程序,最近转换为 mvc 4 并添加了移动视图。我想为移动设备添加显示模式,并为 iPad 的平板电脑添加桌面视图(主要来自这里的流量)。

我的代码中有这样的

DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode()
            {
                ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf("iPad", StringComparison.OrdinalIgnoreCase) >= 0)
            });  
            DisplayModeProvider.Instance.Modes.Insert(1, new DefaultDisplayMode("Mobile")
            {
                ContextCondition = (context => context.GetOverriddenUserAgent().IndexOf("Mobile", StringComparison.OrdinalIgnoreCase) >= 0)
            });   

并设置输出缓存varybycustom,如下所示

public override string GetVaryByCustomString(HttpContext context, string custom)
  {
            string strUserAgent = context.Request.UserAgent.ToLower();
            if (strUserAgent.Contains("ipad"))
            {
                return base.GetVaryByCustomString(context, custom);
            }

            if (Request.Browser.IsMobileDevice)
            {
                    return "mobile";               
            }
            return base.GetVaryByCustomString(context, custom);
}   

我对移动设备和台式机使用相同的网址。

问题: 问题是在将应用程序部署到 azure 之后。1 小时后,手机获得几个 url 的桌面视图。存在不一致。

任何人都可以在我错的地方帮助我。我什至关闭了outputcache 仍然是同样的问题。

4

2 回答 2

5

这是一个已知问题,我们最近发布了 MVC 4 的解决方法 NuGet 包:http: //nuget.org/packages/Microsoft.AspNet.Mvc.FixedDisplayModes

解决方法是简单地将这个 NuGet 包安装到您的项目中。但是,如果您的应用程序自定义已注册视图引擎的集合,则应确保引用

Microsoft.Web.Mvc.FixedRazorViewEngine

或者

Microsoft.Web.Mvc.FixedWebFormViewEngine

而不是默认的视图引擎实现。

于 2012-09-28T22:14:52.977 回答
0

这就是我们将平板电脑定向到桌面视图的方式:

    DisplayModeProvider.Instance.Modes.Insert(0, new DefaultDisplayMode("")
    {
        ContextCondition = (context => DeviceConfig.GetDeviceType(context.GetOverriddenUserAgent()) == "tablet")
    });

我们不是为平板电脑创建唯一的布局和视图,而是检测平板电脑并设置 DisplayModeId = "",这是默认(桌面)视图。

于 2012-12-19T16:19:21.223 回答