AJAX-UpdatePanel: PostBack-Problem durch Browser-Zurück

25/09/2007 - 15:39 von Anonymous | Report spam
Hallo NG!

Ich habe da irgendwie ein Problem beim PostBack, welches mit dem
AJAX-UpdatePanel zusammenhàngt ...

Das UpdatePanel befindet sich in einem UserControl, welches in verschiedene
Seiten der Anwendung verwendet wird. Innerhalb des UpdatePanel befinden sich
zwei ASP-Panels, deren Sichtbarkeit durch bestimmte Schaltflàchen innerhalb
der Panels umgeschaltet wird. Es wird je nach "Modus" also immer nur ein
Panel angezeigt, welches u.a. entsprechende Schaltflàchen enthàlt, um wieder
in den anderen Modus zu schalten.

In einem der Panels (P1) befinden sich weitere PostBack-auslösenden
Schaltflàchen. Befindet sich der Nutzer durch "regulàre" (AJAX-)
Aufrufe gerade auf dem anderen Panel (P2), verwendet dann jedoch die
Zurück-Schaltflàche (=> P1) und betàtigt daraufhin einer der "weitere"
Schaltflàchen, dann erscheint die Fehlermeldung "Die Zustandsinformationen
sind für diese Seite ungültig. Möglicherweise sind sie fehlerhaft."

Soweit ich dies nun durchschauen konnte, liegt das daran, dass der PostBack
quasi durch ein Steuerelement ausgelöst wurde, welches gar nicht mehr in der
Seite vorhanden ist. Der Fehler ist also mehr oder weniger absichtlich
provoziert. (Warum?)

Diese Prüfung kann man zwar durch die Page-Direktive
"EnableEventValidation=false" ausschalten, jedoch werden dann die
EventHandler der Schaltflàchen trotzdem nicht ausgelöst, obwohl diese in den
Request-Params vorhanden sind (aber eben wohl nicht in der Seite).


Wie kann man dies gescheit behandeln? Bleibt mir nichts anderes übrig, als
bei einem PostBack manuell die Request-Params zu durchlaufen und ggf.
manuell die entsprechenden EventHandler für die "weiteren" Schaltflàchen
aufzurufen? Oder gibt es hier noch eine elegantere Lösung? Vor allem ist mir
nicht ganz wohl dabei "EnableEventValidation" auf "false" zu setzen. Welche
Auswirkungen hat das bzw. kann das haben?


Mit freundlichen Grüßen
Daniel Barisch
 

Lesen sie die antworten

#1 Samaschke, Karsten
25/09/2007 - 18:31 | Warnen spam
Moinsens,

Soweit ich dies nun durchschauen konnte, liegt das daran, dass der PostBack
quasi durch ein Steuerelement ausgelöst wurde, welches gar nicht mehr in
der
Seite vorhanden ist. Der Fehler ist also mehr oder weniger absichtlich
provoziert. (Warum?)



Das ist eines der Hauptprobleme bei der Verwendung von AJAX: Die Seite
wird per Zurück-Button nicht auf den vorherigen Status zurückgesetzt,
sondern auf den initialen. Der stimmt nun im Folgenden tatsàchlich nicht
mehr mit den sichtbaren Elementen überein, weshalb das PostBack
scheitern muss.

Diese Prüfung kann man zwar durch die Page-Direktive
"EnableEventValidation=false" ausschalten, jedoch werden dann die
EventHandler der Schaltflàchen trotzdem nicht ausgelöst, obwohl diese in
den
Request-Params vorhanden sind (aber eben wohl nicht in der Seite).



Eben. Die waren vorher nicht sichtbar, nicht vorhanden und wurden somit
auch beim PostBack nicht wiederhergestellt - folglich werden sie auch
ihre Ereignisse nicht ausführen.

Wie kann man dies gescheit behandeln? Bleibt mir nichts anderes übrig, als
bei einem PostBack manuell die Request-Params zu durchlaufen und ggf.
manuell die entsprechenden EventHandler für die "weiteren" Schaltflàchen
aufzurufen? Oder gibt es hier noch eine elegantere Lösung? Vor allem ist
mir
nicht ganz wohl dabei "EnableEventValidation" auf "false" zu setzen. Welche
Auswirkungen hat das bzw. kann das haben?



Die Auswirkung ist halt, dass Ereignisse u.U. nicht mehr automatisch
ausgelöst bzw. die Sender der Ereignisse nicht mehr validiert werden.
Die Seite befindet sich also in einem undefinierten Zustand.

Behandlungsszenarien... Tja, schwierig. Ich würde ggf. per
Page.IsPostBack überprüfen, ob die Seite zurückgepostet worden ist und
sich in einem vernünftigen Zustand befindet. Ist sie zurückgepostet
worden und befindet sich nicht im entsprechenden Zustand, wie er zu
erwarten gewesen wàre, sollte die Rückgabe hier false lauten und man
könnte ggf. die Seite erneut initialisieren, um sie in einen geeigneten
Zustand zu bringen. So oder so: Die vor der Betàtigung der Zurück-Taste
im Browser eingegebenen Daten sind wech.

Mit freundlichen Gruessen / Best regards

Karsten Samaschke
IT-Entwicklung, IT-Beratung, IT-Training
Web: http://www.ksamaschke.de
Blog: http://www.karsan.de
Lesen: http://www.xmldotnet.de

Ähnliche fragen