In ASP.NET MVC, TempData
is a dictionary that is used to store data temporarily, specifically for passing data between actions. It is particularly useful for scenarios where you want to pass data from one action to another, especially when redirecting. The TempData
dictionary has two important methods: Keep
and Peek
. Here’s a detailed explanation of both, along with examples and their differences.
TempData Keep
Purpose: The
Keep
method is used to preserve the data inTempData
for the next request. When you callKeep
, it marks the specified keys to be retained for the next request, allowing you to access the data again after the current request is completed.Usage: You typically use
Keep
when you want to ensure that the data remains available for the next request, even if it has already been read.
Example of TempData Keep
csharp1public class HomeController : Controller 2{ 3 public ActionResult Index() 4 { 5 TempData["Message"] = "Hello from Index!"; 6 return RedirectToAction("Next"); 7 } 8 9 public ActionResult Next() 10 { 11 // Keep the Message for the next request 12 TempData.Keep("Message"); 13 return View(); 14 } 15 16 public ActionResult Display() 17 { 18 // Now we can access the Message again 19 var message = TempData["Message"] as string; 20 return Content(message); // Outputs: Hello from Index! 21 } 22}
In this example, the message is set in the Index
action, and then it is redirected to the Next
action. In the Next
action, we call TempData.Keep("Message")
, which allows us to access the message again in the Display
action.
TempData Peek
Purpose: The
Peek
method is used to read the value of a key inTempData
without marking it for deletion. This means that the data will still be available for the next request after it has been accessed.Usage: You use
Peek
when you want to read the value but do not want to remove it fromTempData
, allowing it to be accessed again in subsequent requests.
Example of TempData Peek
csharp1public class HomeController : Controller 2{ 3 public ActionResult Index() 4 { 5 TempData["Message"] = "Hello from Index!"; 6 return RedirectToAction("Next"); 7 } 8 9 public ActionResult Next() 10 { 11 // Peek the Message without removing it 12 var message = TempData.Peek("Message") as string; 13 return Content(message); // Outputs: Hello from Index! 14 } 15 16 public ActionResult Display() 17 { 18 // Still able to access the Message 19 var message = TempData["Message"] as string; 20 return Content(message); // Outputs: Hello from Index! 21 } 22}
In this example, the Next
action uses TempData.Peek("Message")
to read the message without removing it from TempData
. As a result, the Display
action can still access the message.
Summary
- Use
TempData.Keep
when you want to ensure that the data remains available for the next request after it has been accessed. - Use
TempData.Peek
when you want to read the data without removing it fromTempData
, allowing it to be accessed in future requests.