2008-08-22 18 views

Antwort

6

können Sie versuchen, die HttpResponse.Cache property zu verwenden, wenn 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 Caching der Seite zusammen mit HttpResponse.CacheControl, aber seine veraltet zugunsten der Cache-Eigenschaft oben blockieren könnte:

Response.CacheControl = "No-Cache"; 

Edit: Oder man könnte wirklich go nuts 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 
0

Der beste Weg, damit umzugehen, ist wahrscheinlich eine No-Cache-Direktive in Ihre ASP.NET-Seiten (oder eine Masterseite, wenn Sie eine verwenden). Ich denke nicht, dass es eine Möglichkeit gibt, direkt in Ihrem ASP.NET-Code damit umzugehen (da die Cache-Entscheidung auf dem Client stattfindet).

Wie für MVC, weiß nicht, wie Sie das erreichen würden (vorausgesetzt, es unterscheidet sich von Web Forms-basierten ASP.NET); Ich habe es nicht benutzt.

6

Soweit ich weiß (oder zumindest hat) seine besten nicht zu versuchen, als Reaktion auf Benutzerereignisse zu arbeiten, sondern eher denkt „auf der Seite“ ..

Architekt Ihre Anwendung so es doesn Es ist egal, wenn der Zurück-Knopf gedrückt wird .. Es wird nur damit umgehen .. Dies kann bedeuten, ein wenig mehr Arbeit aus einer Sicht der Entwicklung, aber insgesamt wird die Anwendung viel robuster machen ..

Ie Wenn Schritt 3 einige Datenänderungen durchführt, dann klickt der Benutzer zurück (zu Schritt 2) und klickt erneut auf Weiter, dann prüft die Anwendung, ob die Änderungen vorgenommen wurden. Oder im Idealfall wird keine harte Änderungen vorgenommen bis der Benutzer am Ende auf "OK" klickt. Auf diese Weise werden alle Änderungen gespeichert und Sie können das Formular auf Basis der zuvor eingegebenen Werte beim Laden jedes Mal neu füllen.

Ich hoffe, das macht Sinn:)

+0

-1 Mehr von einer idealen antwort als eine pragmatische. Einige Apps sind von Anfang an auf eine bestimmte Art und Weise entwickelt worden. Wenn man in einem großen Team mit knappem Budget arbeitet, ist es ein ziemlich harter Verkauf, Ressourcen in eine Veränderung der Architektur zu versenken, ohne einen offensichtlichen Gewinn für die Geschäftsinteressenten zu erzielen. Außerdem beantwortet das nicht wirklich die Frage. –

2

RFC 2616 §13.13 sagt, dass Geschichte 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 Zurück-Schaltfläche beeinflusst, handelt es sich um einen Fehler im Browser ... mit einer Ausnahme.

In HTTP S Browser interpretieren Cache-control: must-revalidate als Anforderung, Seiten zu aktualisieren, wenn Zurück-Taste verwendet wird (Mozilla nennt es "silly Bank-Modus"). Dies wird in reinem HTTP nicht unterstützt.

0

Der folgende Code arbeitete für mich in IE9 +, FF21 und Neueste Chrome:

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 in Page_Load() Event-Handler in der Masterpage so dass jede Seite in Ihrer Anwendung einen Round-Trip zu den erfordert Server beim Drücken der Zurück-Taste.