Ich habe die folgenden zwei Aktionsmethoden (für Fragen vereinfacht):
[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"]});
}
}
Wenn die Validierung erfolgreich ist, leite ich auf eine andere Seite um (Bestätigung).
Wenn ein Fehler auftritt, muss ich die gleiche Seite mit dem Fehler anzeigen.
Wenn ich das tue return View()
, wird der Fehler angezeigt, aber wenn ich es tue return RedirectToAction
(wie oben), verliert es die Modellfehler.
Ich bin nicht überrascht von dem Problem und frage mich nur, wie ihr damit umgeht.
Ich könnte natürlich nur dieselbe Ansicht anstelle der Umleitung zurückgeben, aber ich habe Logik in der "Erstellen" -Methode, die die Ansichtsdaten auffüllt, die ich duplizieren müsste.
Irgendwelche Vorschläge?
Create
Methode, die ViewData auffüllt, und rufen Sie sie in der Create
GET-Methode sowie im Zweig für fehlgeschlagene Validierung in der Create
POST-Methode auf.
Create
Dinge in meiner Ansicht zu füllen . Ich habe sie einfach in eine Methode eingefügt populateStuff
, die ich sowohl in the GET
als auch in fail aufrufe POST
.