20

誰かがMVCでのTempDataの目的を説明できますか?ViewBagのように動作することは理解していますが、それを超えるとどうなりますか。

4

3 に答える 3

27

TempDataは非常に短期間のインスタンスであることが意図されており、現在および後続のリクエスト中にのみ使用する必要があります。TempDataはこのように機能するため、次のリクエストがどうなるかを確実に知る必要があります。これを保証できるのは、別のビューにリダイレクトすることだけです。したがって、TempDataの使用が確実に機能する唯一のシナリオは、リダイレクトする場合です。これは、リダイレクトによって現在のリクエストが強制終了され(HTTPステータスコード302 Object Movedがクライアントに送信され)、リダイレクトされたビューを提供するためにサーバー上に新しいリクエストが作成されるためです。前のHomeControllerコードサンプルを振り返ると、次のリクエストの発信元が保証されないため、TempDataオブジェクトが予想とは異なる結果をもたらす可能性があることを意味します。例えば、

http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

于 2012-05-07T19:32:19.690 に答える
9

ViewBag

動的プロパティを作成できます

コントローラとビューの間でデータを渡す

コントローラ

ViewBag.Name= "Lion";

意見

<div>
  <h4>@ViewBag.Name</h4>
 </div>

TempData

TempDataは、非常に短命なインスタンスであることが意図されています

現在および後続のリクエスト中にのみ使用する必要があります

TempDataディクショナリは、コントローラーアクション間でデータを共有するために使用されます

TempData["Name"] = "Lion";
于 2012-10-18T16:46:42.680 に答える
2

TempDataは、TempDataDictionaryクラスから派生し、短命のセッションに格納されるディクショナリオブジェクトです。

public TempDataDictionary TempData { get; set; }

これはControllerBaseクラスのプロパティであり、現在のリクエストから後続のリクエストにデータを渡すために使用されます(あるページから別のページにリダイレクトすることを意味します)。寿命は非常に短く、ターゲットビューが完全に読み込まれるまでしかありません。データを取得し、エラーを回避するためにnull値をチェックするには、型キャストが必要です。エラーメッセージ、検証メッセージなどの1回限りのメッセージのみを格納するために使用されます。

于 2016-01-20T09:55:29.543 に答える