4

こんにちは、最近 mvc 4 に変換され、モバイル ビューが追加された MVC 3 アプリケーションがあります。モバイル用のディスプレイモードをタブレット用のデスクトップビューで追加したいと思います (主にここからのトラフィック)。

私は自分のコードでこのようにしています

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);
}   

モバイルとデスクトップの両方で同じ URL を使用しています。

問題: 問題は、アプリを 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 に答える