Frage

Wir haben ein Popup-Fenster als modalen Dialog mit der IE-Methode implementiert:

window.showModalDialog('...aspx')

Das Ziel des Popup-Fensters ist selbst eine ASP.Net Web-Seite.

Nehmen wir für die folgenden Schritte, dass das Popup nie gestartet:

  1. Starten Sie Popup.
  2. Page_Load-Ereignishandler führt auf Server-Seite.
  3. Pop-up schließen.
  4. Ab sofort startet Popup wieder.
  5. Dieses Mal Page_Load-Ereignishandler wird nicht ausgeführt.

Es ist klar, dass der Popup-Inhalt, weil, wenn 4 bei Schritt zwischengespeichert wird wir die temporären Internetdateien, die Ereignishandler Page Load löschen wird zum zweiten Mal ausgeführt wird.

Wir haben mit dem Hinzufügen der folgenden an den Leiter der Web-Seite experimentiert (wie von mehreren anderen Quellen empfohlen) aber nichts davon scheint zu funktionieren.

<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="-1" />

Wir haben auch Orte gesehen, wo die Verwendung dieser entmutigt

Kann mir jemand helfen?

War es hilfreich?

Lösung

Fügen Sie einen Zeitstempel Abfragezeichenfolgeflag Variable auf die URL des Dialog Inhalt - Anzahl der Ticks seit 1.1.08 oder etwas -. IE als neue Seite behandeln und den Cache ignorieren

Andere Tipps

Um klare Cache fügen Sie diese in Seite zu laden:

Response.Cache.SetCacheability(HttpCacheability.NoCache);

Da die http-equiv Richtlinien funktionieren nicht (und wohl auch nicht verwendet werden soll), und obwohl es leider in der Hack Kategorie von Lösungen zu sein, denke ich, dass wir mit diesem (geschrieben gehen gehen zu müssen, durch Greg) ...

url = "<Some url with query string>"
var date = new Date();
window.showModalDialog(url + “&” + date.getTime(), ... );

Es ist seltsam, dass es keine endgültige Art und Weise ist das Caching auf diesen modalen Dialogen zu deaktivieren. Ich bin mir nicht sicher, ob man mit modalen Dialogen in Web-Browsern als „gute Idee“ angenommen wird oder nicht, aber wir sind zumindest einige der Mängel und Alternativen bewusst, sind aber nur leider nicht in der Lage, sie in diesem Projekt zu verwenden.

Vielen Dank für Ihre Anregungen.

Fiddler zwischen den IE und Ihrem Server. Prüfen Sie dann, ob die Antwort auf Ihre Anfrage einen HTTP-Header trägt Cache-Control . Gibt es einen Wert gegeben andere als no-cache ? Wenn ja, dann vielleicht wird IE diese Header Priorität geben über Ihre http-equiv Richtlinie.

Wenn nicht, sollten Sie versuchen, den Server senden, um die HTTP-Header machen Cache-Control: no-cache . Wenn IE dies nicht respektiert, es ist ein Fehler im Internet Explorer. Die Erfahrung zeigt, es ist weniger schmerzhaft für eine andere Lösung zu entscheiden als für einen Bugfix zu drücken, so dass in diesem Fall würde ich an die Spitze von Greg zustimmen.

Zuerst habe ich versucht, durch den folgenden Code verwenden.

meta http-equiv="Cache-Control" content="no-cache" 
meta http-equiv="Pragma" content="no-cache" 
meta http-equiv="Expires" content="-1" 

, aber es wurde eine Lösung nach nicht gegeben, habe ich versucht, mit Abfrage-Zeichenfolge mit Zeitstempel variabel, wie

vat time = new Date().getTime();

url?queryString&time=time

dann funktioniert es ....

Danke ...

Haben Sie einen Tag, um die Seite erneut zu verarbeiten.

<base target="_top" />

Wenn Sie unten angegebenen Tags setzen, wird die Cache gereinigt werden:

<meta http-equiv="Expires" content="0" />
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<base target="_top" />

Einer der seltsamen Macken von IE ist, dass am Anfang der Datei nicht funktioniert no-cache Einstellung erscheinen, aber bewegt diesen Abschnitt zu, nachdem die ursprüngliche HTML oft der Fall ist. Noch am besten als ein HTTP-Header zu senden, aber das Folgende in den meisten Fällen funktioniert:

<html>
   <head><title>Blah</title></head>
   <body>Contents</body>
</html>
<html>
   <head>
      <meta http-equiv="Cache-Control" content="no-cache" />
      <meta http-equiv="Pragma" content="no-cache" />
      <meta http-equiv="Expires" content="-1" />
   </head>
</html>

Die Antwort Response.Cache.SetCacheability (HttpCacheability.NoCache); ist der einzige, der richtig mit IE9 funktioniert. Wenn Sie den Zeitstempel in der Abfragezeichenfolgeflag gesetzt, haben Sie immer noch die Seite zu aktualisieren, eine andere URL zu erhalten. So wird der modalen Dialogzwischengespeichert noch, bis die Aktualisierung der Seite ist, es sei denn, Sie verwenden Response.Cache.SetCacheability (HttpCacheability.NoCache); Verwendung eines Zeitstempel auf der URL und Response.Cache.SetCacheability (HttpCacheability.NoCache); Am besten wäre, alle Basen bedecken. Es ist IE wir nach allem zu tun hat.

Sie können auch die folgende Aussage an der Spitze der aspx Seite versuchen, genannt zu werden:

<%@ OutputCache Location="None" %>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top