Frage

Ich bin Rendering eine gemeinsame Log-In Form Html.RenderAction verwenden, auf jeder Seite von meiner Seite.

Wenn der Benutzer gibt seine Daten in das Textfeld ein und klickt auf ‚Senden‘, es macht einen POST an einen Controller, der das Protokoll in abwickelt.

Wenn sie einen Fehler, wie zum Beispiel der Eingabe einer E-Mail-Adresse ungültig zu machen, wird es das Model mit einer Fehlermeldung füllen und dann umleiten zurück zu, was Seite sie waren vor.

Das Problem ist, weil Render als separate Anfrage auftritt, ich verliere das Ansichtsmodell.

Auch wenn ich es in TempData es verloren geht, da TempData auf jeder separaten Anfrage gespült wird.

Gibt es eine Möglichkeit, Daten zwischen aufeinanderfolgenden Html.RenderAction Anrufen zu bewahren?

Wenn nicht, irgendwelche Vorschläge, wie ich dies zu hacken vielleicht in der Lage? (Sollte die Daten in Session sagen?)

War es hilfreich?

Lösung

Hier ist, was ich für den Augenblick getan haben. (Dies ist wahrscheinlich nicht die ideale Lösung.)

Ich habe eine ‚PreserveViewDataAttribute‘, die ich auf jede Handlung zu setzen, für die ich die Viewdata in der Sitzung erhalten wollen.

In meiner Base, overrode ich die ‚Redirect‘ Methode mit meiner eigenen Methode, die die folgenden Fall ist.

  1. Ruft einen Verweis auf die Aktion-Methode, die es (ein wenig Reflexion hier) genannt

  2. überprüft, ob diese Methode des 'PreserveViewDataAttribute' hat definiert drauf

  3. Wenn es der Fall ist, kopiert die aktuelle Bildschirmtextsystem zu einer Session-Variablen. (Die Bezeichnung der Variablen ist das gleiche wie die aktuellen Aktion Namen, die mit ‚_ViewData‘ auf das Ende angeheftet.)

  4. In beiden Fällen ruft die Basis Redirect-Methode.

Dann habe ich eine Eigenschaft in der Base genannten ‚PreservedViewData‘, die die Viewdata in der Sitzung gibt, relevant für die aktuelle Aktion. (Oder gibt null zurück, wenn nicht gefunden).

So zu bewahren Viewdata, solange ich will, ich brauche nur meine Aktion mit ‚PreserveViewDataAttribute‘ dekorieren, und rufen Sie dann ‚PreservedViewData‘, wenn ich es brauche.

Lassen Sie mich wissen, wenn Sie den Quellcode dazu wollen.

Andere Tipps

Vielleicht möchten Sie diese Post-Redirect-Get Abschnitt Ansatz von Kazi Rashid.

http://weblogs.asp.net/rashid/archive/2009/04/01/asp-net-mvc-best-practices-part-1.aspx#prg

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top