10

モバイル Web アプリケーションを開発しています。現在のディスプレイモードを取得する必要がありますコントローラーでモバイルです。

私の問題は次のとおりです。2つのパーシャルビューがあります

/Views/Shared/ListItem.cshtml
/Views/Shared/ListItem.mobile.cshtml

PartialView("ListItem")を使用すると、これは正しく機能します。しかし、部分ビューをサブフォルダーに入れる必要があります

/Views/Shared/Modules/Post/ListItem.cshtml
/Views/Shared/Modules/Post/ListItem.mobile.cshtml

PartialView ("~/Views/Shared/Modules/Post/ListItem.cshtml")を使用すると、これはデスクトップで機能します。displaymode が mobile の場合、ListItem.mobile.cshtml表示されません。

私の選択は

if( CurrentDisplayMode==Mobile){
  PartialView("~/Views/Shared/Modules/Post/ListItem.mobile.cshtml");
else
  PartialView("~/Views/Shared/Modules/Post/ListItem.cshtml");

入手方法はCurrentDisplayMode?この問題を解決するには?

4

4 に答える 4

7

ビューに渡されたビュー モデルを調整できるように、現在の表示モードにもアクセスする必要がありました (モバイル ビューの情報が少ないため、小さなビュー モデルから表示できます)。

ControllerContext.DisplayModeアクションの実行後に設定されるため、使用できません。

そのため、コンテキスト (ユーザー エージェント、Cookie、画面サイズなど) に基づいて表示モードを決定する必要があります。

ASP.NET フォーラムで見つけた便利なトリックを次に示します。これにより、後でフレームワークによって使用されるのと同じロジックを使用して表示モードを決定できます。

public string GetDisplayModeId()
{
    foreach (var mode in DisplayModeProvider.Instance.Modes)
        if (mode.CanHandleContext(HttpContext))
            return mode.DisplayModeId;

    throw new Exception("No display mode could be found for the current context.");
}
于 2013-03-05T04:44:45.373 に答える
1

次の値を確認してください: HttpContext.GetOverriddenBrowser().IsMobileDevice

于 2012-05-22T14:11:13.143 に答える
0

あなたが持っている最良のオプションは、Android iPhoneなどをリッスンできるリクエストヘッダーのユーザーエージェントフィールドをチェックすることです。これは画面サイズを提供せず、ノキアの電話などをリッスンしていない場合は機能しませんが、これはほとんどの企業が行っているように、サポート対象を制限できます。

于 2012-11-24T23:58:40.723 に答える
0

MSはあなたにこれを使用してほしいと思っています:

controller.ControllerContext.DisplayMode

動作しますが、2 つの大きな問題が見つかりました (この投稿の日付の時点で):

  1. 単体テスト。DisplayMode プロパティは手動で設定できず (NullReferenceException をスロー)、仮想ではないためモックできません。
  2. MvcDonutCachingでは機能しません。ページのキャッシュされた部分を要求すると、DisplayMode は単純に NULL を返します。
于 2012-10-23T22:28:30.410 に答える