¿Podría algún cuerpo explicar cuándo usar
- TempData
- ViewBag
- Ver datos
Tengo un requisito, donde necesito establecer un valor en un controlador uno, ese controlador redirigirá al Controlador Dos y el Controlador Dos representará la Vista.
Intenté usar ViewBag, el valor se pierde cuando llego al controlador dos.
¿Puedo saber cuándo usar y ventajas o desventajas?
Gracias
asp.net-mvc-3
Hari Gillala
fuente
fuente
Respuestas:
Le permite almacenar datos que sobrevivirán para una redirección. Internamente utiliza la sesión como almacén de respaldo, después de que se realiza la redirección, los datos se expulsan automáticamente. El patrón es el siguiente:
Le permite almacenar datos en una acción del controlador que se utilizará en la vista correspondiente. Esto supone que la acción devuelve una vista y no redirige. Vive solo durante la solicitud actual.
El patrón es el siguiente:
y en la vista:
o con ViewData:
y en la vista:
ViewBag
es solo un contenedor dinámicoViewData
y existe solo en ASP.NET MVC 3.Dicho esto, ninguna de esas dos construcciones debe usarse nunca. Debe usar modelos de vista y vistas fuertemente tipadas. Entonces el patrón correcto es el siguiente:
Ver modelo:
Acción:
Vista fuertemente tipada:
Después de esta breve introducción, respondamos su pregunta:
y la vista correspondiente (
~/Views/Two/Index.cshtml
):También hay inconvenientes en el uso de TempData: si el usuario alcanza F5 en la página de destino, los datos se perderán.
Personalmente, tampoco uso TempData. Es porque internamente usa Session y desactivo la sesión en mis aplicaciones. Prefiero una forma más RESTANTE para lograr esto. Que es: en la primera acción del controlador que realiza la redirección, almacene el objeto en su almacén de datos y use la identificación única generada al redirigir. Luego, en la acción de destino, use esta identificación para recuperar el objeto almacenado inicialmente:
La vista se mantiene igual.
fuente
ViewBag.Title
propiedad en todas mis Vistas que se usa en mi_Layout.cshtml
archivo de vista base. Otro caso en el que lo uso es dar mensajes de información (por ejemplo, "¡Producto guardado con éxito!") A los usuarios. Puse un marcado genéricoLayout.cshtml
para representar un mensaje si se proporcionó y esto me permite configurarViewBag.Message
cualquier Acción. Usar una propiedad ViewModel para cualquier caso tiene demasiadas desventajas.ViewBag
. Describa un escenario específico del mundo real, cuando ViewBag tiene algún uso. Como usted dice que sí, cito un recurso poderoso , supongo que tiene algunos casos específicos en los que este poderoso recurso es poderoso . Como nunca lo he usado en mi carrera, estaría muy feliz de saber cómo la gente usa esta poderosa arma.ASP.NET MVC nos ofrece tres opciones: ViewData, ViewBag y TempData para pasar datos del controlador a la vista y en la próxima solicitud. ViewData y ViewBag son casi similares y TempData realiza una responsabilidad adicional. Vamos a discutir u obtener puntos clave sobre esos tres objetos:
Similitudes entre ViewBag y ViewData:
Diferencia entre ViewBag y ViewData:
ViewBag & ViewData Ejemplo:
En vista:
TempData:
TempData también es un diccionario derivado de la clase TempDataDictionary y se almacena en una sesión de corta vida y es una clave de cadena y un valor de objeto. La diferencia es que el ciclo de vida del objeto. TempData conserva la información durante el tiempo de una solicitud HTTP. Esto significa solo de una página a otra. Esto también funciona con una redirección 302/303 porque está en la misma solicitud HTTP. Ayuda a mantener los datos cuando se mueve de un controlador a otro controlador o de una acción a otra. En otras palabras, cuando redirige, "TempData" ayuda a mantener los datos entre esos redireccionamientos. Utiliza internamente variables de sesión. El uso de datos temporales durante la solicitud actual y posterior solo significa que se usa cuando está seguro de que la próxima solicitud se redirigirá a la vista siguiente. Requiere conversión de texto para tipos de datos complejos y verificar valores nulos para evitar errores.
El último mecanismo es la sesión, que funciona como ViewData, como un diccionario que toma una cadena de clave y un objeto de valor. Este se almacena en la cookie del cliente y se puede utilizar durante mucho más tiempo. También necesita más verificación para nunca tener información confidencial. Con respecto a ViewData o ViewBag, debe usarlo de manera inteligente para el rendimiento de la aplicación. Porque cada acción pasa por todo el ciclo de vida de la solicitud regular asp.net mvc. Puede usar ViewData / ViewBag en su acción secundaria, pero tenga cuidado de no usarla para llenar los datos no relacionados que pueden contaminar su controlador.
fuente
TempData
Básicamente es como un DataReader, una vez leído, los datos se perderán.
Mira este video
Ejemplo
Si presta atención al código anterior, RedirectToAction no tiene ningún impacto sobre TempData hasta que se lea TempData. Entonces, una vez que se lee TempData, los valores se perderán.
¿Cómo puedo mantener TempData después de leer?
Verifique la salida en el Método de Acción Prueba 1 y Prueba 2
Si presta atención al código anterior, los datos no se pierden después de RedirectToAction, así como después de leer los datos y la razón es que estamos utilizando
TempData.Keep()
. es esoDe esta manera, puede hacer que persista tanto tiempo como desee en otros controladores también.
ViewBag / ViewData
Los datos persistirán en la vista correspondiente
fuente
TempData en Asp.Net MVC es una de las características muy útiles. Se utiliza para pasar datos de la solicitud actual a la solicitud posterior. En otras palabras, si queremos enviar datos de una página a otra mientras se produce la redirección, podemos usar TempData, pero debemos tener en cuenta el código para lograr esta función en MVC. Debido a que la vida de TempData es muy corta y permanece solo hasta que la vista de destino se carga por completo. Pero, podemos usar el método Keep () para conservar los datos en TempData.
Lee mas
fuente
ViewBag, ViewData, TempData y View State en MVC
http://royalarun.blogspot.in/2013/08/viewbag-viewdata-tempdata-and-view.html
ASP.NET MVC nos ofrece tres opciones: ViewData, VieBag y TempData para pasar datos del controlador a la vista y en la próxima solicitud. ViewData y ViewBag son casi similares y TempData realiza una responsabilidad adicional.
Similitudes entre ViewBag y ViewData:
Diferencia entre ViewBag y ViewData:
ViewBag & ViewData Ejemplo:
En Vista, llamamos como a continuación:
TempData:
El único escenario en el que usar TempData funcionará de manera confiable es cuando está redirigiendo. Esto se debe a que una redirección mata la solicitud actual (y envía el código de estado HTTP 302 Objeto movido al cliente), luego crea una nueva solicitud en el servidor para servir la vista redirigida.
Requiere conversión de texto para tipos de datos complejos y verificar valores nulos para evitar errores.
fuente
fuente
TempData siempre estará disponible hasta la primera lectura, una vez que lo lea ya no estará disponible, puede ser útil para pasar un mensaje rápido también para ver que desaparecerá después de la primera lectura. ViewBag Es más útil cuando se pasan datos rápidamente a la vista, normalmente debe pasar todos los datos a la vista a través del modelo, pero hay casos en los que el modelo proviene directamente de la clase que se asigna a la base de datos como el marco de la entidad en ese caso No importa qué cambiar su modelo para pasar una nueva pieza de datos, puede pegarlo en la vista ViewData es solo una versión indexada de ViewBag y se usó antes de MVC3
fuente
Además, el alcance es diferente entre viewbag y temptdata. viewbag se basa en la primera vista (no se comparte entre los métodos de acción) pero los datos temporales se pueden compartir entre un método de acción y solo entre sí.
fuente