2009-07-01 11 views
1

Ich habe ein Formular, wenn der Benutzer das Formular abschickt, möchte ich dem Benutzer die neue Ansicht zeigen, um das übermittelte Ergebnis anzuzeigen (ViewMode-Daten zur Ansicht übertragen).Viewmodel kann von RedirectToAction nicht an neue Aktion übergeben werden

Wenn ich das Formular postete, kann ich vm erstellen und es in den temporären Datenplatz _vm legen. Aber diese _vm kann an eine andere Aktion DisplayData gesendet werden, es ist null in der Aktion DisplayData(). Es scheint, dass _vm wenn Redirect-Aktion sogar in demselben Controller verloren ist, obwohl es Controller var ist, nicht Aktionsmethode var.

Wie wird das Problem gelöst?

Antwort

3

Es erstellt eine neue Instanz des Controllers, da es sich um eine neue Anfrage handelt, die Sie also als null erkannt haben. Sie TempData verwenden könnte die vm zu speichern, bleibt TempData die Daten für 1 Anfrage nur

Gute Erklärung here

0

Eine gute Möglichkeit ist

return DisplayData(_vm) 

statt

RedirectToAction("DisplayData") 
zu nennen

DisplayData sollte ein Modell trotzdem akzeptieren.

+0

aber dann verlieren Sie die Post, Redirect, Get Pattern – redsquare

+0

RedirectToAction ("DisplayData") wird wieder die aktuelle Ansicht mit Post-Aktion sein. – KentZhou

+0

@KentZhou nicht sicher, dass ich dich verstehe. Wenn Sie den HTTP-Header "Location" umleiten, wird dem Browser mitgeteilt, wohin er gehen soll, und der Browser nimmt eine GET-Anfrage für diese Seite vor. Es wird keine Post machen. – redsquare

Verwandte Themen