5

ViewDataViewBagasp.net mvc 状態管理の一部であるかどうかを教えてください。ありがとう

4

3 に答える 3

11

ViewBag状態を保存しViewDataませんが、ビューに渡してレンダリングおよび保存することができます。

ViewBagととは何ViewDataですか?

ViewBagおよびViewData状態永続化メカニズムではありませんが、状態管理の一部であると私は信じています。これらは、生成された html で状態として永続化できるページにデータを渡すためのメカニズムです。@Html.HiddenForこのように、これらは状態のライフサイクルの一部であり、またはなどのヘルパーを使用してクライアント側の html に状態を保存できるためです@Html.ActionLink

「あるActionResultからjs値を保存して別のActionResultで使用する」に対する私の回答では、クライアントhtmlに状態を保存する方法ViewBagViewData使用できる方法、および状態保存のさまざまなオプションについて説明します。

とは何かというViewBagと、実際にはdynamicにアクセスする方法なViewDataのでViewBag.MyItem = "foo";、 とvar valueEqualsFoo = ViewData["MyItem"];は同じ文字列を設定して返し、交換することができます。

彼らは何に似ていますか?

ViewBagViewDataアクション内のビューモデルに最も密接に接続されています。ここで、モデルは を使用してアクション内のビューに渡されますreturn View(viewModel);: 3 つの手法はすべて、メモリ内の状態を html に渡し、そこでクライアントに送信されます。サーバーから離れて「持続」します。

同様に、URL のクエリ文字列が http リクエストでサーバーに送信される場合、これは状態を渡す方法であり、実際の状態ストア<a href="urlwithquerystring">...</a>html のアンカーです。Restful URL、および POST ajax リクエストの本文は、定義と動作が同じです。ViewBag/DataAction から 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 を防止するために生成された偽造防止トークン
  • サーバー側ストレージ (ASP.NET および ASP.NET MVC に直接関連):
  • サーバー側ストレージ (その他):
    • SQL または NOSQL のデータベース
    • ファイルストレージ
    • WASB などのメッセージ キュー

脚注:

†</sup>現在、レスポンシブ デザイン用の使いやすいツールが用意されており、必要に応じて使用できます 、常に適切であるとは限りません。一部のビュー、モバイルではまったく異なるように見える必要がありますが、それでも大画面サイトと同じビューモデルを使用します

于 2013-06-01T19:02:59.787 に答える