2010-04-29 8 views
9

Ich habe eine ASP.net-Anwendung (C#).Chrome Zurück Button Seite aktualisieren - ASP.net

Wenn ein Benutzer auf einer bestimmten Seite ist, klickt er auf einen Link auf dieser Seite, der ihn auf eine untergeordnete Seite bringt und die Produktdetails anzeigt.

Wenn der Benutzer auf die Schaltfläche Zurück des Browsers klickt, muss die übergeordnete Seite in ihren ursprünglichen Zustand aktualisiert werden. dh alle Textfelder, die Daten eingegeben haben, müssen leer sein, irgendwelche versteckten Felder zurücksetzen etc. Grundsätzlich brauche ich ein STRG-F5, wenn ein Benutzer zurückklickt.

Das Deaktivieren der Zurück-Taste ist keine Option.

Ich brauche das nur auf bestimmten Seiten.

In IE und Firefox kann ich das ohne ein Problem arbeiten. Aber bei chrome enthalten die Textfelder noch ihre Werte, ebenso wie die versteckten Felder. Wenn ich in Chrome STRG-F5 drücke, wird die Seite korrekt auf ihren ursprünglichen Zustand zurückgesetzt.

Dies ist der Code, den ich ausprobiert habe.

<%@ OutputCache Location="None" VaryByParam="None" %> 

und diese:

Response.Buffer = true; 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetAllowResponseInBrowserHistory(false); 
    Response.Cache.SetNoStore(); 

und diese:

Response.Cache.SetExpires(DateTime.UtcNow.AddDays(-1)); 
    Response.Cache.SetValidUntilExpires(false); 
    Response.Cache.SetRevalidation(HttpCacheRevalidation.AllCaches); 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 
    Response.Cache.SetNoStore(); 

Ich habe versucht, auch eine Vielzahl von diesem in unterschiedlicher Kombination, aber ohne Erfolg.

dank

+0

Mit welchen Chrome (s) haben Sie das versucht? Entwickler? Beta? Stabil? Windows? – bzlm

Antwort

0

Die ‚Brute-Force‘ Lösung wäre, einige Javascript auf der Seite zu setzen, die beim Laden der Seite der Daten in einen bekannten Zustand versetzt. So findet es alle Elemente und setzt die Daten basierend auf einem Array von Daten oder JSON-Objekten. Auf der ersten Anfrage, da sowieso alles voreingestellt ist, macht die Einstellung keinen Unterschied. Da das JavaScript weiterhin ausgeführt werden muss, werden alle Werte zurückgesetzt, unabhängig vom Browser.

Ich glaube nicht, dass Sie einen Browser dazu zwingen können, so zu funktionieren, wie Sie es beschreiben, denn es liegt an jedem Browser, wie er eine Zurück-Schaltfläche implementieren möchte - Chrome macht es einfach anders.

6

Wenn die Zurück-Taste des Browsers gedrückt wird, werden die INPUT-Felder nicht automatisch vom Browser zurückgesetzt. Stattdessen behält der Browser die Eingaben des Benutzers bei, sodass Benutzer einfacher zurückgehen und Änderungen an der Eingabe vornehmen können.

Sie können diese Server-Seite nicht lösen, da der Browser den Cache dafür umgeht. Stattdessen können Sie das HTML-Attribut autocomplete="off" in den Eingabefeldern verwenden, um zu verhindern, dass sie vom Browser beibehalten werden.auch manuell zurückgesetzt das Formular JavaScript

Sie können mit:

document.getElementById("form1").reset(); 
+1

danke. Dies erklärt nicht, warum IE und Firefox erfrischend erscheinen, aber nicht Chrome. – SetiSeeker

+0

Es ist eine Design-Wahl von den Google-Leuten, denke ich. Ich bin immer noch froh, dass sie das Attribut "Autocomplete" als Workaround unterstützen. – Prutswonder

+0

Dies ist eine böse "Funktion" von Chrome für Entwickler. Es hat lange gedauert, bis ich herausgefunden habe, was mit meiner dynamischen Form passiert (Benutzer können neue Zeilen hinzufügen, die beim Senden in einer Datenbank gespeichert werden). Auf "zurück" würde Chrome die db-IDs der zuvor hinzugefügten Zeilen nicht ausfüllen (obwohl meine App sie im HTML-Format ausgab), sodass meine App dachte, sie seien alle neu und dupliziere sie bei einer weiteren Übermittlung. 'autocomplete =" off "' funktioniert jedoch. – theyetiman

2

Diese beiden Linien auf das Chrome-Problem für mich gelöst:

Response.Cache.SetCacheability(HttpCacheability.NoCache); 
Response.Cache.SetNoStore(); 

Und ich benutze diese optionale Linie um den Browser zu sagen, nicht zu einen Historieneintrag für jede Anforderung der gleichen Seite erstellen:

Response.Cache.SetAllowResponseInBrowserHistory(true); 

Quellen:

Most popular answer in this post

Optional line

0

Sie auch die Autocomplete = "off" auf dem Formular-Tag statt jedes Eingabefeld setzen.