What is the difference between TempData keep() and peek() function? - ablealias/MVC GitHub Wiki
TempData is used to preserve the data for next request, TempData uses TempDataDictionary where every data read, will be marked as available for deletion, keep() and peek() both are used to retain data, the only difference is, keep() will be used to retain data that has been marked for deletion (Read and Keep), whereas peek() will be used where you want to read data without marking it for deletion.
Example:
@TempData["MyData"];
TempData.Keep("MyData"); // here we are reading it first after that unmarking it using
keep.stringstr = TempData.Peek("Td").ToString(); //here we are reading without marking it for deletion.
Stackoverflow Answer
When an object in a TempDataDictionary
is read, it will be marked for deletion at the end of that request.
That means if you put something on TempData like
TempData["value"] = "someValueForNextRequest";
And on another request you access it, the value will be there but as soon as you read it, the value will be marked for deletion:
//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
The Peek
and Keep
methods allow you to read the value without marking it for deletion. Say we get back to the first request where the value was saved to TempData.
With Peek
you get the value without marking it for deletion with a single call,
//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"];
With Keep
you specify a key that was marked for deletion that you want to keep. Retrieving the object and later on saving it from deletion are 2 different calls.
//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"];
You can use Peek
when you always want to retain the value for another request. Use Keep
when retaining the value depends on additional logic.