2010-05-25 9 views
5

Ich versuche, einen "Flicker" -Effekt zu verhindern, der auf meiner ASP.NET-Seite auftritt, der auftritt, wenn ein Benutzer über die Zurück-Schaltfläche des Browsers zur Seite navigiert, nachdem er sich von ihm entfernt hat. Der Grund für das Flimmern ist, dass ich ein Update-Panel verwende, das bei der ersten Seitenladung etwas Inhalt enthält. Wenn die Seite über eine Zurück-Schaltfläche geladen wird, wird der ursprüngliche Inhalt daher sehr kurz angezeigt, bevor er mit den korrekten Verlaufsdaten aktualisiert wird.Wie kann ich clientseitig feststellen, wenn das Laden einer Seite das Ergebnis eines AJAX-Verlaufspunkts ist?

Um dies zu überwinden, beabsichtige ich, das Updatepanel beim ersten Seitenladevorgang auszublenden (Anzeige: keine) und es dann anzuzeigen, solange wir keine Historie haben, um damit umzugehen. Das Problem ist, dass ich nicht herausfinden kann, was ich überprüfen muss, um festzustellen, ob es eine Geschichte gibt. Ich kann sehen, dass die Sys.Application ein _history Mitglied hat, aber wenn ich es auf Seiteninitiierung überprüfe, ist es jedes Mal null.

Weiß jemand, was ich überprüfen sollte, um zu bestimmen, ob Geschichte für eine Seite geladen werden muss, die client-seitig ist? Und an welchem ​​Punkt, um es zu tun?

Antwort

1

Der Zurück-Button des Browsers und die Funktionalität, die er bietet, sind völlig unabhängig vom Inhalt Ihrer Webseite.

Eine Sache, die Sie möglicherweise tun können, ist, Ihren Standort-Hash festzulegen, wenn Sie ein AJAX-Update durchführen. Sie können dies möglicherweise feststellen, wenn Sie eine Seite laden. Ich habe es nicht ausprobiert. Sie sollten in der Lage sein, den # Teil der URL auf der Serverseite zu analysieren und zu sehen, wo Sie sich im AJAX-Verlauf befinden.

location.hash = 'foo'; 
0

Vielen Dank für Ihre Antwort Daniel. Ich habe jetzt ein div um mein Update-Panel, dessen Display-Eigenschaft auf none gesetzt ist. Beim Initialisierungs-Ereignis von Sys.Application überprüfe ich den Wert von window.location.hash, um zu bestimmen, ob das Laden der Seite das Ergebnis eines Browser-Back/Forward-Buttons ist. Wenn dies nicht der Fall ist, setze ich die display -Eigenschaft auf block, wenn nicht, lasse ich sie vorerst "display: none".

Auf der Serverseite im ScriptManager Navigate-Ereignishandler, der als Ergebnis der Zurück-Schaltfläche aufgerufen wird, registriere ich einen Clientskriptblock, der die Anzeigeeigenschaft auf Blockierung setzt.

Ich habe ein bisschen getestet und scheint gut zu funktionieren und ich bekomme nicht mehr das Flimmern. Ich würde es vorziehen, eines der MS AJAX-Client-Objekte zu verwenden, um nach dem Verlauf zu suchen, aber da sind wir.

+0

Das ist der beste Weg, es zu tun: Stellen Sie die Anzeige: keine auf der Seite laden (OnBody). Es sollte dafür sorgen. – waqasahmed

+3

sollten Sie die Kommentare verwenden, um auf Personen zu antworten, die antworten, oder bearbeiten Sie Ihre ursprüngliche Frage mit weiteren Details basierend auf Fragen oder Feedback anderer Personen. Bitte poste die Diskussion nicht als individuelle Antwort, es sei denn, es ist die eigentliche Antwort auf dein Problem (du hast es selbst gelöst.) –

0

Setzen Sie eine versteckte Eingabe in die Seite mit einem leeren Wert und legen Sie dann beim Laden der Seite ihren Wert fest. Sie werden feststellen, dass das Seitenladeskript bei Verwendung der Zurück-Schaltfläche den Wert immer noch festlegt und Sie entsprechend reagieren können. Dies nutzt die Browserfunktionalität, die den Formularinhalt zwischen Seitenladevorgängen bewahrt.

Verwandte Themen