web-dev-qa-db-ja.com

MVC C#TempData

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

18
Nate Pet

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

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

24
Jakub Konecki

ViewBag

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

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

コントローラー

ViewBag.Name= "Lion";

ビュー

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

TempData

TempDataは、非常に短期間のインスタンスであることを意図しています

現在および後続のリクエストの間のみ使用してください

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

TempData["Name"] = "Lion";

私はこれについてブログ投稿を書いています。それをチェックしてください Asp.Net MVC TempDataを適切に使用する方法?

9
Sampath

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

public TempDataDictionary TempData { get; set; }

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

2