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% 確実ではありません。
何か案は?