ViewDataとViewBagもasp.net mvc 状態管理の一部であるかどうかを教えてください。ありがとう
3 に答える
ViewBag
状態を保存しViewData
ませんが、ビューに渡してレンダリングおよび保存することができます。
ViewBag
ととは何ViewData
ですか?
ViewBag
およびViewData
状態永続化メカニズムではありませんが、状態管理の一部であると私は信じています。これらは、生成された html で状態として永続化できるページにデータを渡すためのメカニズムです。@Html.HiddenFor
このように、これらは状態のライフサイクルの一部であり、またはなどのヘルパーを使用してクライアント側の html に状態を保存できるためです@Html.ActionLink
。
「あるActionResultからjs値を保存して別のActionResultで使用する」に対する私の回答では、クライアントhtmlに状態を保存する方法ViewBag
とViewData
使用できる方法、および状態保存のさまざまなオプションについて説明します。
とは何かというViewBag
と、実際にはdynamic
にアクセスする方法なViewData
のでViewBag.MyItem = "foo";
、 とvar valueEqualsFoo = ViewData["MyItem"];
は同じ文字列を設定して返し、交換することができます。
彼らは何に似ていますか?
ViewBag
、ViewData
アクション内のビューモデルに最も密接に接続されています。ここで、モデルは を使用してアクション内のビューに渡されますreturn View(viewModel);
: 3 つの手法はすべて、メモリ内の状態を html に渡し、そこでクライアントに送信されます。サーバーから離れて「持続」します。
同様に、URL のクエリ文字列が http リクエストでサーバーに送信される場合、これは状態を渡す方法であり、実際の状態ストアは<a href="urlwithquerystring">...</a>
html のアンカーです。Restful URL、および POST ajax リクエストの本文は、定義と動作が同じです。ViewBag/Data
Action から html に状態を渡します。これはクライアントに渡されて保存されます。クエリ文字列または安静な URL は、次の Action 呼び出しで使用するために状態をサーバーに戻します。
いつ使用する必要がありますか?
Razor コードでスペルミスのある動的プロパティをチェックするのは困難です。厳密に型指定されたビュー モデルにプロパティが存在するかどうかを簡単に確認できます。したがって、それらを使用することはめったにないと思います。ViewBag
私の意見では、 orを使用するよりも、厳密に型指定されたビュー モデルを作成することをお勧めしますViewData
。迅速で汚い解決策としては問題ないかもしれませんが、これらは技術的負債を生み出す傾向があります。ページタイトルの設定にはおそらく問題ありません。ViewBag
厳密に型指定されたビュー モデル:
- automapperなどのフレームワークでマッピングを使いやすくします。
- ビューをよりテストしやすくします。と
- 同じモデルを各ビューに渡すことで、デバイスごとに異なるビューを簡単に作成できます†</sup>
状態の保存にはどのようなオプションがありますか?
ここで言いましたが、もう一度言います: ASP.NET には少なくとも9 つの永続的なユーザー状態を管理するためのオプションがあり、それらの多くは MVC にも適用されます。それらはすべて、状態の使用方法に応じてさまざまな用途があります。一般に、可能な限りステートレスなサーバー側コードは、テストとデバッグが容易です。
- クライアント側のストレージには以下が含まれます:
- エンティティは html の結果で返され、次のようになります。
- 入力フィールド
- 隠しフィールド
- ajax リクエスト POST ボディで使用する Javascript 変数
- クエリ文字列値、および URL 内のパス (例: のような安らかな URL
/Product/1
)
- 次のような非表示の html フィールドに状態を保持する古い ASP.NET 手法
ViewState
- クッキー
- Local Storageなどの Html5 手法
- XSRF を防止するために生成された偽造防止トークン
- エンティティは html の結果で返され、次のようになります。
- サーバー側ストレージ (ASP.NET および ASP.NET MVC に直接関連):
- セッション(コントローラーの
Session
プロパティから利用可能 - キャッシュ (コントローラの
Cache
プロパティから利用可能) - 温度データ
- HttpContext[「アイテムキー」]
- アプリケーション(コントローラーの
HttpContext
プロパティから利用可能HttpContext.Application
) - Web.config および Machine.config ファイル (はい、これらも状態を保持します。アプリケーション全体です)、したがって
WebConfigurationManager.AppSettings
辞書です。
- セッション(コントローラーの
- サーバー側ストレージ (その他):
- SQL または NOSQL のデータベース
- ファイルストレージ
- WASB などのメッセージ キュー
脚注:
†</sup>現在、レスポンシブ デザイン用の使いやすいツールが用意されており、必要に応じて使用できますが 、常に適切であるとは限りません。一部のビューは、モバイルではまったく異なるように見える必要がありますが、それでも大画面サイトと同じビューモデルを使用します。