asp.net mvc - sesiones - Diferencia entre ViewData y TempData?
viewbag list (4)
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?
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.
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 here :
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.
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 diccionariopublic 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 claseController
TempData:
-
TempData
utiliza internamenteTempDataDictionary
:public TempDataDictionary TempData { get; set; }
public TempDataDictionary TempData { get; set; }
- 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.
- 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