ASP.NET MVC–TempData

ASP.NET MVC dostarcza wiele kontenerów na dane m.in. ViewBag czy ViewData. Istnieje jeszcze do dyspozycji TempData, który czasami może przydać się. Zacznijmy od przykładu:

public class HomeController : Controller
{
   public ActionResult Index()
   {
       TempData["Message"] = "test";
       return RedirectToAction("Display");
   }
   public ActionResult Display()
   {
       string msg = (string)TempData["Message"];
       return View();
   }
}

TempData działa bardzo podobnie do sesji. Pozwala przechowywać dane po stronie serwera, co jest przydatne w niektórych scenariuszach, gdy potrzebujemy przekazać dane pomiędzy zapytaniami.

Jaka sama nazwa jednak mówi, TempData służy do przechowywania tymczasowych wartości, które potrzebujemy na krótki czas. Ze względu, że dane w TempData zostaną zniszczone bardzo szybko, powinniśmy używać ich wyłącznie w następnym zapytaniach(np. poprzez Redirect).

Ponadto, próba odczytu danych automatycznie niszczy wpis. Raz odczytana wartość z TempData, zostanie zniszczona i nie będzie już dostępna w następnych zapytaniach. Jeśli chcemy przeczytać TempData w kilku akcjach należy użyć metody Keep:

TempData.Keep("Message");

W przeciwnym wypadku, odczyt za pomocą TempData[“Message”] po prostu unieważni wpis.

Powyższe uwagi oznaczają, że można mieć łańcuch akcji i w każdej z nich korzystać z TempData, pod warunkiem, że Keep zostanie wywoływany.

TempData może przechowywać każdy typ, który wspiera serializacje. Należy pamiętać, że sesja może również być przechowywana w bazie danych, stąd warto mieć na uwadze co przechowujemy w TempData.

2 thoughts on “ASP.NET MVC–TempData”

Leave a Reply

Your email address will not be published.