Bei Verwendung von ASP.NET MVC gibt es Situationen (z. B. das Senden von Formularen), für die möglicherweise eine erforderlich ist RedirectToAction
.
Eine solche Situation besteht darin, dass nach dem Senden eines Formulars Validierungsfehler auftreten und Sie zum Formular zurückleiten müssen, die URL jedoch die URL des Formulars widerspiegeln soll, nicht die Aktionsseite, an die es gesendet wird.
Wie POST
kann ich die Daten durch das Formular weiterleiten, da ich die ursprünglich bearbeiteten Daten aus Gründen der Benutzerfreundlichkeit sowie zu Validierungszwecken enthalten muss RedirectToAction()
? Wenn ich den Parameter viewData verwende, werden meine POST
Parameter in GET
Parameter geändert .
c#
asp.net-mvc
Matt Mitchell
quelle
quelle
Antworten:
Die Lösung besteht darin, die TempData-Eigenschaft zum Speichern der gewünschten Anforderungskomponenten zu verwenden.
Zum Beispiel:
Dann können Sie in Ihrer "Formular" -Aktion gehen:
quelle
Beachten Sie, dass TempData die Formularsammlung in einer Sitzung speichert. Wenn Ihnen dieses Verhalten nicht gefällt, können Sie die neue ITempDataProvider-Schnittstelle implementieren und einen anderen Mechanismus zum Speichern von temporären Daten verwenden. Ich würde das nicht tun, wenn Sie nicht sicher wissen (über Messung und Profilerstellung), dass die Verwendung des Sitzungsstatus Sie verletzt.
quelle
Werfen Sie einen Blick auf MVCContrib , können Sie dies tun:
quelle
Es gibt einen anderen Weg, der Tempdaten vermeidet. Das Muster, das mir gefällt, beinhaltet das Erstellen einer Aktion sowohl für das ursprüngliche Rendern als auch für das erneute Rendern des ungültigen Formulars. Es geht ungefähr so:
Das ist mehr oder weniger das Muster. Ein bisschen Pseudo. Mit dieser Option können Sie eine Ansicht erstellen, um das Rendern des Formulars zu übernehmen, die Werte erneut anzuzeigen (da das Formular mit vorherigen Werten gefüllt wird) und Fehlermeldungen anzuzeigen.
Wenn die Buchung für diese Aktion gültig ist, überträgt sie die Kontrolle auf eine andere Aktion.
Ich versuche, dieses Muster im .net-Validierungsframework zu vereinfachen, während wir die Unterstützung für MVC ausbauen.
quelle
Wenn Sie Daten an die umgeleitete Aktion übergeben möchten, können Sie folgende Methode verwenden:
quelle
TempData ist die Lösung, die die Daten von Aktion zu Aktion hält.
quelle