1. ホーム
  2. asp.net-mvc

TempData keep() vs peek()

2023-08-01 19:27:51

質問

keep()とpeek()の違いは何ですか?

MSDNによると

  • keep(): marks the specified key in the dictionary for retention.
  • peek(): returns an object that contains the element that is associated with the specified key, without marking the key for deletion.

何が違うのかよくわからないのですが、どちらも別のリクエストのために値を保持しているのではないのでしょうか?

どのように解決するのですか?

オブジェクトが TempDataDictionary にあるオブジェクトが読み込まれると、そのリクエストの終了時に削除するようにマークされます。

つまり、もしあなたがTempDataに次のようなものを置くなら

TempData["value"] = "someValueForNextRequest";

そして、別のリクエストでアクセスすると、値はそこにありますが、読んだとたんに値は削除されるようにマークされます。

//second request, read value and is marked for deletion
object value = TempData["value"];

//third request, value is not there as it was deleted at the end of the second request
TempData["value"] == null

PeekKeep メソッドを使用すると、値を削除するようにマークすることなく値を読み取ることができます。値がTempDataに保存された最初のリクエストに戻るとします。

とは Peek を使うと、一回の呼び出しで削除のためのマークを付けずに値を取得できます。 msdn :

//second request, PEEK value so it is not deleted at the end of the request
object value = TempData.Peek("value");

//third request, read value and mark it for deletion
object value = TempData["value"];

とは Keep を使うと、削除マークがついたキーのうち、残しておきたいものを指定することができます。オブジェクトを取得することと、後で削除から保存することは、2つの異なる呼び出しです。参照 msdn

//second request, get value marking it from deletion
object value = TempData["value"];
//later on decide to keep it
TempData.Keep("value");

//third request, read value and mark it for deletion
object value = TempData["value"];

を使うことができます。 Peek は、別のリクエストのために常に値を保持したい場合に使用します。使用方法 Keep を使います。

TempDataがどのように機能するかについて、2つの良い質問があります。 ここで はこちら

お役に立てれば幸いです。