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
Keepmethod is used to preserve the data inTempDatafor 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
Keepwhen 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
Peekmethod is used to read the value of a key inTempDatawithout 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
Peekwhen 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.Keepwhen you want to ensure that the data remains available for the next request after it has been accessed. - Use
TempData.Peekwhen you want to read the data without removing it fromTempData, allowing it to be accessed in future requests.
