Tengo los siguientes dos métodos de acción (simplificados para la pregunta):
[HttpGet]
public ActionResult Create(string uniqueUri)
{
// get some stuff based on uniqueuri, set in ViewData.
return View();
}
[HttpPost]
public ActionResult Create(Review review)
{
// validate review
if (validatedOk)
{
return RedirectToAction("Details", new { postId = review.PostId});
}
else
{
ModelState.AddModelError("ReviewErrors", "some error occured");
return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"]});
}
}
Entonces, si la validación pasa, redirijo a otra página (confirmación).
Si ocurre un error, necesito mostrar la misma página con el error.
Si lo hago return View()
, se muestra el error, pero si lo hago return RedirectToAction
(como arriba), pierde los errores del modelo.
No me sorprende el problema, solo me pregunto cómo manejan esto.
Por supuesto, podría devolver la misma Vista en lugar de la redirección, pero tengo lógica en el método "Crear" que completa los datos de la vista, que tendría que duplicar.
¿Alguna sugerencia?
Create
método que completa ViewData y llámelo en elCreate
método GET y también en la rama de validación fallida en elCreate
método POST.Create
vista, simplemente lo puse en algún métodopopulateStuff
que llamo tanto en elGET
como en el failPOST
.