Diferencia entre ViewData y TempData?

Sé lo que es ViewData y lo uso todo el tiempo, pero en ASP.NET Preview 5 introdujeron algo nuevo llamado TempData.

Normalmente escribo fuertemente mi ViewData, en lugar de utilizar el enfoque del diccionario de objetos.

Entonces, ¿cuándo debería usar TempData en lugar de ViewData?

¿Hay alguna mejor práctica para esto?

En una frase: TempData son como ViewData con una diferencia: solo contienen datos entre dos solicitudes sucesivas, después de eso se destruyen. Puede usar TempData para pasar mensajes de error o algo similar.

Aunque obsoleto, este artículo tiene una buena descripción del ciclo de vida de TempData .

Como dijo Ben Scheirman aquí :

TempData es un diccionario de almacenamiento temporal respaldado por una sesión que está disponible para una única solicitud. Es genial pasar mensajes entre los controladores.

Cuando una acción devuelve un resultado RedirectToAction causa un redireccionamiento HTTP (equivalente a Response.Redirect). Los datos pueden conservarse en la propiedad TempData (diccionario) del controlador mientras dure una única solicitud de redireccionamiento HTTP.

Encontré esta comparación útil: http://www.dotnet-tricks.com/Tutorial/mvc/9KHW190712-ViewData-vs-ViewBag-vs-TempData-vs-Session.html

Una cosa que encontré es que los valores de TempData se borran después de que se leen por defecto. Hay opciones, vea los métodos ‘Peek’ y ‘Keep’ en Msdn para más información .

Ver datos:

  • ViewData es un tipo de diccionario public ViewDataDictionary ViewData { get; set; } public ViewDataDictionary ViewData { get; set; }
  • Se puede usar para pasar datos del controlador a la vista, solo de una manera
  • Su vida se encuentra solo durante la solicitud actual
  • Si pasa la secuencia, entonces no es necesario encasillar
  • Si pasa un objeto, entonces necesita encasillarlo, pero antes de eso debe verificar si no es nulo.
  • Es una propiedad en ControllerBase , que es el padre de la clase Controller

TempData:

  1. TempData utiliza internamente TempDataDictionary : public TempDataDictionary TempData { get; set; } public TempDataDictionary TempData { get; set; }
  2. Una vez que los datos se guardan en el objeto TempDataDictionary :
    • Persiste en él y se puede leer desde cualquier vista o acción en cualquier controlador
    • Solo se puede leer una vez; una vez leída, se vuelve nula
    • Se guarda en la sesión, por lo que al caducar los datos de la sesión se pierde.

Este comportamiento es nuevo de ASP.NET MVC 2 y últimas versiones. En versiones anteriores de ASP.NET MVC, los valores en TempData estaban disponibles solo hasta la próxima solicitud.

  1. Está vivo, hasta que se lee o la sesión expira y se puede leer desde cualquier lugar.

Consulte la comparación de ViewData, ViewBag, TempData y Session en MVC en detalle

los datos de vista se usan cuando queremos pasar datos del controlador a la vista correspondiente. Los datos de vista tienen una vida muy corta, lo que significa que destruirá cuando se produzca la redirección. Ejemplo (controlador):

 public ViewResult try1() { ViewData["DateTime"] = DateTime.Now; ViewData["Name"] = "Mehta Hitanshi"; ViewData["Twitter"] = "@hitanshi"; ViewData["City"] = "surat"; return View(); } 

try1.cshtm

 
Name Twitter Email City Mobile
@ViewData["Name"] @ViewData["Twitter"] @ViewData["City"]

TempData transfiere los datos entre controladores o entre acciones. Se usa para almacenar mensajes de una sola vez y su vida útil es muy corta. Ejemplo (controlador):

 public ActionResult try3() { TempData["DateTime"] = DateTime.Now; TempData["Name"] = "Ravina"; TempData["Twitter"] = "@silentRavina"; TempData["Email"] = "Ravina12@gmail.com"; TempData["City"] = "India"; TempData["MobNo"] = 9998975436; return RedirectToAction("TempView1"); } public ActionResult TempView1() { return View(); } 

TempView1.cshtm

 
Name Twitter Email City Mobile
@TempData["Name"] @TempData["Twitter"] @TempData["Email"] @TempData["City"] @TempData["MobNo"]