2009-07-13 3 views
0

Ich habe eine Webformular-Seite, die AJAX ziemlich umfangreich nutzt. Es gibt eine Reihe von Links, die den Benutzer auf eine andere Seite führen. Ich möchte den Status beibehalten, in dem sich die Seite befand, falls der Benutzer mit der Zurück-Schaltfläche des Browsers zu ihm zurückkehren sollte.ASP.NET im Cache gespeicherte Seite. Der Status wird gespeichert, erfordert aber eine Aktualisierung.

Wie ich das getan habe, ist der Zustand der Seite in Sitzung jedes Mal gespeichert, wenn der Benutzer mit der Seite interagiert. Wenn sie zu der Seite zurückkehren, wird, wenn in der Sitzung ein Zustand existiert, dieser geladen und dem Benutzer angezeigt.

Ich habe diese "Art" zu arbeiten. Die Seite wird korrekt gespeichert und kann korrekt geladen werden, erfordert aber leider eine Seitenaktualisierung (F5), um sie zu laden, andernfalls wird sie auf einen vorherigen Zustand zurückgesetzt.

Eine Idee, warum die Seite ohne Aktualisierung nicht korrekt gerendert wird? Wie kann ich das Problem lösen?

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.Cache.SetCacheability(HttpCacheability.NoCache); 

    if (!Page.IsPostBack) 
    { 
     DataBindDropDowns(); 

     if (HasQueryString()) 
     { 
      SetOptionsFromQueryString(); 
      SavePageToSession(); 
      Response.Redirect("Default.aspx"); 
     } 
     else 
     { 
      RestoreFromSession(); 
      DisplayOptions(); 
     } 
    } 
} 
+0

Funktioniert die Server-Seite OnLoad Fire, wenn Sie die Broswear-Taste drücken? Oder rendert der Browser die Seite, ohne die Seite erneut vom Server anzufordern? – BigBlondeViking

+0

Ausgezeichneter Punkt! Das OnLoad-Ereignis wird nicht ausgelöst ... – Kirschstein

Antwort

0

Verwenden Sie das Ereignis 'load', um die Seite zu initialisieren? Wenn ein Benutzer die Zurück-Schaltfläche drückt, wird das Ereignis 'Laden' nicht ausgelöst, das Ereignis 'Dom Inhalt bereit' jedoch.

See:

Is there a cross-browser onload event when clicking the back button?

Wenn Sie jQuery verwenden, versuchen Sie Ihre Seite Initialisierung Logik in ready-Ereignis zu setzen und Sie sollten gut sein. Wenn Sie jQuery nicht verwenden, finden Sie die geeignete Methode zum Herstellen einer Verbindung mit dem DOM Content Loaded/Ready-Ereignis und zum Initialisieren Ihrer Seite.

Wenn es immer noch nicht funktioniert, bitte posten Sie Ihren Code, damit wir das Problem debuggen können.

EDIT:

Sieht aus wie Sie Header entsprechende Ablaufdatum festlegen möchten, so dass Browser die Seite neu geladen wird, wenn wieder Schaltfläche geklickt wird. Versuchen Sie Code aus folgenden Seite:

http://www.352media.com/rantingandraving/rave.aspx?raveid=325&id=212

+0

Editierte meine Frage, um den Code anzuzeigen. Ich mache das aus dem .NET-Code heraus, nicht aus Javascript. Tut mir leid, hätte das deutlicher machen sollen. – Kirschstein

+0

Nun, abhängig von der Einstellung für den Seitenablauf kann der Browser die Serverseite aufrufen oder nicht, wenn der Benutzer auf die Zurück-Schaltfläche klickt. Wenn Sie in Ihrem Code keine Ablaufeinstellungen für Seiten eingerichtet haben, wird standardmäßig ein Ablaufdatum festgelegt. Wenn der Benutzer die Zurück-Schaltfläche drückt, fordert der Browser die Seite nicht vom Server an, die zwischengespeicherte Kopie wird angezeigt und das Load-Ereignis wird nicht angezeigt Feuer. – SolutionYogi

+0

Ich habe dies sowohl mit als auch ohne Response.Cache.SetCacheability (HttpCacheability.NoCache) – Kirschstein

0

Hier ist meine Vermutung, die Frage der Pageload Basis aus nicht feuern ...

Ich wette, die ASPX-Datei mit Cache-Header an den Client gesendet wird. ..

Ziehen Sie Feuer Bug oder Fiddler und sehen Sie MaxAge HTTP-Antwort-Header kommt von Ihrem Server.

Wenn dies der Fall ist, müssen Sie entfernt werden, da der Browser die Datei nicht erneut anfordert, weil sie aufgefordert wurde, dies nicht zu tun.

0

HTML 5 Offline-Speicher ist eine andere Option und ziemlich erstaunlich, weil es in allen gängigen Browsern funktioniert, seit IE 8 herauskam.

Ich habe ein jQuery-Plugin zum Speichern von Formular-Status für die Rückgabe von Benutzern bei http://www.jasonsebring.com/dumbFormState, die viel von dem, was Sie reden und hat nichts mit Server-Seite zu tun und funktioniert sogar in HTML-Seiten.

Es gibt einige weitere Funktionen, die ich hinzufügen könnte, wie das Speichern des Formulars in seiner Gesamtheit, so dass es nicht einmal auf einem zusätzlichen Seitentreffer gerendert werden müsste.Ich konzentriere mich darauf, die tatsächlichen Auswahlen zu speichern, die der Benutzer automatisch vorgenommen hat, und wenn der Benutzer zurückkehrt, bleiben die Formularauswahlen dort, wo sie aufgehört haben, und Sie können sie aus der Sitzung oder dem lokalen Speicher löschen. Dies ist eine schöne neue Welt in HTML 5 und es wird viele alte Paradigmen geben, die verschwinden werden, wenn die neueren Browser die vergangenen Probleme löschen. Das Aufrechterhalten des Formzustands ist sicherlich ein riesiges und altes Problem, das alle Nutzung gerne weglassen würde.

JavaScript wird heutzutage nur noch stärker, also sollten Sie diese HTML 5-Fähigkeiten bekommen. Ich empfehle, zu lesen, zu hören und alles von Douglas Crockford zu beobachten, da Ihre Skepsis gegenüber JavaScript ernsthaft verschwindet und Sie feststellen werden, dass Verschlüsse die beste Sache sind, die jemals in der Programmierung neben Variablen und Funktionen geschaffen wurde.

Verwandte Themen