Mam następujące dwie metody działania (uproszczone do pytania):
[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"]});
}
}
Jeśli więc walidacja przejdzie pomyślnie, przekierowuję na inną stronę (potwierdzenie).
Jeśli wystąpi błąd, muszę wyświetlić tę samą stronę z błędem.
Jeśli to zrobię return View()
, błąd jest wyświetlany, ale jeśli to zrobię return RedirectToAction
(jak powyżej), powoduje utratę błędów modelu.
Nie jestem zaskoczony problemem, po prostu zastanawiam się, jak sobie z tym radzicie?
Mógłbym oczywiście po prostu zwrócić ten sam widok zamiast przekierowania, ale mam logikę w metodzie „Utwórz”, która zapełnia dane widoku, które musiałbym powielić.
Jakieś sugestie?