Frage

Wie geht man am besten damit um, wenn ein Benutzer zu einer Seite zurückkehrt, auf der Elemente in einer asp.net-App zwischengespeichert wurden?Gibt es eine gute Möglichkeit, die Zurück-Schaltfläche (Ereignis?) zu erfassen und den Cache auf diese Weise zu verwalten?

War es hilfreich?

Lösung

Sie können es mit dem versuchen HttpResponse.Cache-Eigenschaft falls das helfen würde:

Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(false);
Response.Cache.VaryByParams["Category"] = true;

if (Response.Cache.VaryByParams["Category"])
{
   //...
}

Oder könnte das Caching der Seite ganz blockieren HttpResponse.CacheControl, aber es wurde zugunsten der oben genannten Cache-Eigenschaft veraltet:

Response.CacheControl = "No-Cache";

Bearbeiten:ODER du könntest es wirklich verrückt werden und alles von Hand machen:

Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1 
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1 
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1 
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1 
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1 

Andere Tipps

Soweit ich weiß (oder zumindest gelesen habe), ist es am besten, nicht als Reaktion auf Benutzerereignisse zu arbeiten, sondern eher „in der Seite“ zu denken.

Gestalten Sie Ihre Anwendung so, dass es egal ist, ob die Zurück-Taste gedrückt wird.Es wird einfach damit klarkommen..Aus entwicklungstechnischer Sicht bedeutet dies möglicherweise etwas mehr Arbeit, aber insgesamt wird die Anwendung wesentlich robuster.

Das heißt, wenn in Schritt 3 einige Datenänderungen durchgeführt werden, klickt der Benutzer zurück (zu Schritt 2) und klickt erneut auf „Weiter“. Anschließend prüft die Anwendung, ob die Änderungen vorgenommen wurden.Oder im Idealfall macht es keine hart Änderungen, bis der Benutzer am Ende auf „OK“ klickt.Auf diese Weise werden alle Änderungen gespeichert und Sie können das Formular beim Laden jedes Mal auf der Grundlage der zuvor eingegebenen Werte neu ausfüllen.

Ich hoffe das ergibt Sinn :)

RFC 2616 §13.13 sagt, dass Verlauf und Cache sind verschiedene Dinge.Es sollte absolut keine Möglichkeit geben, dass der Cache die Zurück-Schaltfläche beeinflusst.

Wenn eine Kombination von HTTP-Headern die Schaltfläche „Zurück“ beeinträchtigt, liegt ein Fehler im Browser vor … mit einer Ausnahme.

Im HTTPS Browser interpretieren Cache-control: must-revalidate als Aufforderung, Seiten zu aktualisieren, wenn die Zurück-Schaltfläche verwendet wird (Mozilla nennt es „Silly Bank Mode“).Dies wird in einfachem HTTP nicht unterstützt.

Der beste Weg, damit umzugehen, besteht wahrscheinlich darin, eine No-Cache-Direktive in Ihre ASP.NET-Seiten (oder eine Masterseite, falls Sie eine verwenden) einzufügen.Ich glaube nicht, dass es eine Möglichkeit gibt, dies direkt in Ihrem ASP.NET-Code zu behandeln (da die Cache-Entscheidung auf dem Client erfolgt).

Was MVC betrifft, wissen Sie nicht, wie Sie das erreichen würden (vorausgesetzt, es unterscheidet sich von ASP.NET, das auf Web Forms basiert).Ich habe es nicht benutzt.

Der folgende Code hat bei mir in IE9+, FF21 und dem neuesten Chrome funktioniert:

Response.Cache.SetCacheability(HttpCacheability.NoCache | HttpCacheability.Private);
Response.Cache.AppendCacheExtension("must-revalidate");
Response.Cache.AppendCacheExtension("max-age=0");
Response.Cache.SetNoStore();

Sie können dies einfügen Page_Load() Event-Handler in der MasterPage, sodass jede Seite in Ihrer App beim Drücken der Zurück-Taste einen Roundtrip zum Server erfordert.

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