ASP.NET UpdatePanel: Machen Sie die Schaltfläche "Zurück" des Browsers, um zur * letzten * Version der Seite zurückzukehren

8

Ich habe Seite A und Seite B. Sie können die folgenden Dinge auf Seite A tun:

  • Machen Sie Dinge auf Seite A (z. B. wählen Sie ein Element in einem Listenfeld), was dazu führt, dass ein UpdatePanel auf Seite A mit zusätzlichen Informationen neu gezeichnet wird.
  • Gehen Sie weiter zu Seite B. Dies geschieht mit einem Button und Response.Redirect .

Nun ist das Problem wie folgt:

  1. Der Benutzer tut Sachen auf Seite A. Seite A unterscheidet sich jetzt von seinem ursprünglichen Zustand.
  2. Der Benutzer wechselt zu Seite B.
  3. Der Benutzer drückt den Zurück-Button des Browsers.

Was passiert: Seite A im Ausgangszustand wird angezeigt.
Was ich gerne tun würde: Die Seite A in ihrem Endzustand wird angezeigt (d. H. Mit dem "richtigen" Eintrag im Listenfeld ausgewählt).

Ich weiß über ScriptManager.AddHistoryPoint ! Soweit ich sehen kann, löst es mein Problem nicht:

  • Ich könnte AddHistoryPoint jedes Mal aufrufen, wenn etwas auf Seite A getan wird. Das ist schlecht, weil es den Browserverlauf mit vielen Einträgen überlagert. (Ein neuer Eintrag jedes Mal ein anderes Listenfeld Element ausgewählt ist.) Aber das ist genau das, was ich vermeiden möchte, indem Sie ein UpdatePanel verwenden! Natürlich, wenn es eine ReplaceLastHistoryPoint -Methode gäbe, wäre das perfekt, aber ich habe keine gefunden ...

  • Ich habe versucht, AddHistoryPoint direkt vor Response.Redirect aufzurufen, um nur den letzten Status von Seite A zu speichern, aber leider funktioniert das nicht (kein history-Punkt ist Gerettet). Dies ist nicht überraschend, wenn man bedenkt, wie Response.Redirect funktioniert.

Gibt es eine Lösung, die ich verpasst habe? Ich verwende .NET 3.5SP1, falls es darauf ankommt.

    
Heinzi 20.12.2012, 15:16
quelle

2 Antworten

2

Anstatt AddHistoryPoint auf dem Server aufzurufen, können Sie addHistoryPoint auf dem Client mit der Sys.Application-Klasse aufrufen, Ссылка .

Sie würden also einen clientseitigen Klick-Listener zu der Schaltfläche hinzufügen, die HISTORYPOINT auf dem Client hinzufügt, bevor die Schaltfläche den Post zurückgibt und umleitet.

    
graham mendick 20.12.2012 15:35
quelle
1

Dies ist ein bisschen eine alte Frage, aber ich werde weitermachen und den Mechanismus bereitstellen, den ich dafür verwende. Die Grundidee ist, dass Sie AddHistoryPoint nicht erlauben, Ihre Name-Wert-Paare zu verwalten, sondern einfach einen Schlüssel für Ihre NameValueCollection verwalten, den Sie woanders aufbewahren, wie in Ihrem Session-Cache. Wenn dann nachfolgende Ajax-Anforderungen eingehen, führen Sie nie einen weiteren Aufruf von AddHistoryPoint aus. Stattdessen ersetzen Sie einfach Ihre NameValueCollection durch den Status der aktuellen Anfrage.

Das einzige andere Bit besteht darin, zu verfolgen, ob Sie an Ihrem ersten Ajax-Anruf teilnehmen und den ersten Aufruf von AddHistoryPoint durchführen müssen oder nicht.

Mein Code sieht ungefähr so ​​aus:

%Vor%     
Kevin Donn 17.09.2013 15:49
quelle