4

ASP.NET MVC 4 (RC) ビューのカスタム DisplayModes を使用して、ビューのコンテンツをカスタマイズできるようにしています。

このモバイル専用アプリのルールは非常にシンプルで、ユーザーの内部プロファイル/セッション構成に基づいて定義されています。

DisplayModeProvider.Instance.Modes.Insert(0,
    new DefaultDisplayMode("Tablet")
    {
        ContextCondition = (context =>
        {
            if (SessionManager.Current == null)
                return false;   // assume phone initially

            if (SessionManager.Current.Session.ScreenWidth > 600)
                return true;

            return false;
        })
    });

DisplayModeProvider.Instance.Modes.Insert(0,
    new DefaultDisplayMode("Phone")
    {
        ContextCondition = (context =>
        {                        
            if (SessionManager.Current == null ||
                SessionManager.Current.Session.ScreenWidth <= 600)
                return true;   // assume phone initially

            return false;
        })
    });

xxxx.Phone.cshtml と xxxx.Tablet.cshtml を使用するビューを作成できるようになりました。右側のビューがレンダリングされます。

ただし、ViewContext.DisplayMode.DisplayModeId は常に空白に戻ります。たとえば、次のページでは、表示モードとハードコーディングされた ID をエコー バックして、どのビューがレンダリングされたかを示しています。

<div>@Model.Distance - @ViewContext.DisplayMode.DisplayModeId  - Tablet</div>

ハードコーディングされた Tablet (または Phone) の値が表示されますが、DisplayModeId は常に空白です。

この値を設定する必要がありますか? これは MVC 4 ベータ版の以前のビルドでは機能していたと思いますが、100% 確実ではありません。

何か案は?

4

2 に答える 2

0

私の記憶が正しければ、これは ContextCondition が null に設定されている場合に発生する可能性があります。その場合、他のすべての DisplayModeProvider は考慮されません。

どの ContextCondition も null を返さないと確信していますか? おそらく、デリゲート内の例外が原因でしょうか? 固定値を返そうとしましたか (テスト目的で?

于 2012-06-13T21:10:02.753 に答える
0

でモードを取得することViewContext.DisplayMode.DisplayModeIdは実用的ではありません。このコードは、ビューの名前が ViewName.Table.cshtml の場合にのみ機能します。マスターのみが _Master.Tablet.cshtml の場合、プロパティは空の結果を返します。

したがって、ビューが正しいモードである場合にのみ正しい結果が得られるため、モードを取得しても意味がありません。

于 2012-11-02T10:13:15.227 に答える