mvc asp.net-mvc viewdata redirecttoaction

asp.net mvc - mvc - mantener viewdata en RedirectToAction



redirecttoaction c# (5)

Como TempData parece usar almacenamiento, y cualquier forma de ITempDataProvider que no esté "en proceso", requiere que el objeto sea Serializable, TempData parece lamentablemente inadecuado en situaciones de granja web ... (ViewDataDictionary no es en sí mismo serializable ...) ¿Alguien tiene alguna sugerencia para esto?

[AcceptVerbs(HttpVerbs.Post)] public ActionResult CreateUser([Bind(Exclude = "Id")] User user) { ... db.SubmitChanges(); ViewData["info"] = "The account has been created."; return RedirectToAction("Index", "Admin"); }

Esto no mantiene el texto "información" en viewdata después del redirectToAction. ¿Cómo puedo solucionar este problema de la manera más elegante?

Mi idea actual es colocar los elementos de la acción de control del Índice en [NonAction] y llamar a ese método desde la acción Index y en la acción CreateUser, pero tengo la sensación de que debe haber una forma mejor.

Gracias.


Puede usar la propiedad del controlador TempData , pero tiene la desventaja de que utiliza el almacenamiento de la sesión en segundo plano. Esto significa que tendrá trabajo adicional para que funcione en una granja de servidores web y deberá tener sesiones habilitadas en su aplicación en primer lugar.

Una alternativa es usar cookies si solo necesita transportar un mensaje corto. Esto requiere un cifrado adecuado de la cookie. No depender de la propiedad TempData también le permite configurar mensajes en un contexto no MVC, por ejemplo, en una página ASHX clásica.

Eche un vistazo a FlashMessage que puede ahorrarle algo de trabajo al implementar esto usted mismo.


Puedes usar TempData .

TempData["info"] = "The account has been created." .

TempData existe exactamente para esta situación. Utiliza Session como almacenamiento, pero no estará disponible después de la segunda respuesta.

Desde MSDN:

Un uso típico para un objeto TempDataDictionary es pasar datos de un método de acción cuando redirige a otro método de acción. Por ejemplo, un método de acción puede almacenar información sobre un error en la propiedad TempData del controlador (que devuelve un objeto TempDataDictionary) antes de llamar al método RedirectToAction. El siguiente método de acción puede manejar el error y representar una vista que muestra un mensaje de error.


Si necesita esto más de una vez, una buena solución sería crear ActionFilterAttributes que exportar / importar los tempdata para ver los datos y viceversa. Puede pasar su ModelState de esta manera muy bien también (demostrado here - # 13). Con algunos ajustes en ese fragmento de código, tendría una solución limpia, creo.


Use ViewData si sus datos deben ser accesibles en la View durante "esta" solicitud. Use `TempData ''si sus datos son para la siguiente solicitud (por ejemplo , patrón de diseño POST-REDIRECT-GET ).