2010-04-13 5 views
5

Ich habe ein Formular, mit dem der Benutzer die Daten eingeben und dann senden kann. Wenn alles gut mit diesem Aktionsergebnis funktioniert, werde ich den Benutzer zurück auf eine Dankeseite umleiten.So behandeln Sie die Übermittlung von Formularen ASP.NET MVC Zurück-Schaltfläche?

mein Problem ist jetzt, dass wenn der Benutzer auf die Schaltfläche zurück klicken, sie in der Lage sein werden, zurück zur Formularseite gehen und die Eingaben werden immer noch da sein.

und wenn der Benutzer nur auf submit erneut klickt, bekomme ich einige potentielle seltsame Bugs.

so in Bezug auf asp.net mvc, was ist der beste Weg, um Benutzer zu behandeln, die auf den Zurück-Button klicken?

danke!

Antwort

1

Was meinst du mit "mögliche seltsame Bugs"? Ich bezweifle, dass der Benutzer erneut submit klicken würde, es sei denn, sie wollten genau das gleiche wieder posten. Ich möchte keine doppelten Posts, überprüfen Sie den Inhalt vor dem Posten gegen Ihre DB.

Wenn Sie wirklich hören Menschen nicht will, zweimal die gleiche Form zu veröffentlichen, eine zufällig generierte Nummer setzen (nur sicherstellen, dass es zufällig genug um Kollisionen zu vermeiden oder so etwas wie eine Kombination aus Benutzer-ID und einem präzisen Zeitstempel) in ein verstecktes Feld, speichern Sie das mit Ihren Daten und prüfen Sie, ob es nicht bereits in Ihrer Datenbank vorhanden ist, bevor Sie etwas speichern.

+0

Da asp.net mvc staatenlos ist, dachte ich nur, dass sie vielleicht eine neue Shebang-Methode oder Best Practice haben, um das auch zu handhaben. – melaos

+0

Ich mag es nicht, wenn Leute behaupten, eine Methode sei "die beste Praxis". –

+0

lol wahr, aber es gibt hässliche Hacks und dann gibt es besser bewährte Alternativen zu verwenden. Ich versuche, so viel wie möglich zu vermeiden. – melaos

6

Diese Lösung funktioniert sowohl für perfekt die gesamte Steuerung oder eine bestimmte Aktion, fügen Sie einfach [NoCache]

/// <summary> 
/// Prevent a controller or specific action from being cached in the web browser. 
/// For example - sign in, go to a secure page, sign out, click the back button. 
/// <seealso cref="https://stackoverflow.com/questions/6656476/mvc-back-button-issue/6656539#6656539"/> 
/// </summary> 
public class NoCacheAttribute : ActionFilterAttribute 
{ 
    public override void OnResultExecuting(ResultExecutingContext filterContext) 
    { 
     var response = filterContext.HttpContext.Response; 
     response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
     response.Cache.SetValidUntilExpires(false); 
     response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
     response.Cache.SetCacheability(HttpCacheability.NoCache); 
     response.Cache.SetNoStore(); 
    } 
} 

Und in Ihrem Code:

[NoCache] 
[Authorize] 
public class AccountController : Controller 
{ ... } 

Ursprünglich hier gepostet: MVC Back button issue