2012-04-04 9 views
0

Ich habe Seite, die eine Multiview verwendet. Jede Ansicht enthält ein separates Benutzersteuerelement. Eines dieser Benutzersteuerelemente hat eine Listenansicht mit einer Bildschaltfläche, die das Laden einer anderen Ansicht in der Mehrfachansicht verursacht. Bis zu diesem Punkt ist alles in Ordnung. Wenn der Benutzer die Zurück-Schaltfläche drückt, werden sie zu dem Benutzersteuerelement zurückgebracht, das die Listenansicht enthält. Der Benutzer klickt dann auf eine andere Bildschaltfläche, um andere Daten anzuzeigen, und es kehrt mit den gleichen Daten wie zuvor zum Detailbenutzersteuerelement zurück. Während des Debugging habe ich gesehen, dass das Objektbefehlsereignis nicht ausgelöst wird, nachdem die Zurück-Schaltfläche gedrückt wurde.listview itemcommand nicht feuern nach Zurück-Taste

Ich habe versucht, die Multiview zu ersetzen und jedes Benutzersteuerelement in separate Panels zu setzen. Das hat das Ergebnis überhaupt nicht verändert.

Ich habe versucht, ein Cookie zu setzen, das 5 Sekunden nach dem Laden der Seite abläuft. Wenn der Benutzer mit der nächsten Seite fortfährt und dann zurückklickt (und es länger als 5 Sekunden dauert), erzwinge ich die erneute Übermittlung des Formulars. Dies lädt das nächste Steuerelement erneut, anstatt die Seite neu zu laden.

Ich habe versucht, die Cache-Fähigkeit auf keinen Cache setzen. Dies führt zu einer Meldung "Seite abgelaufen", und der Benutzer muss die Seite aktualisieren. Dies ist für den Benutzer hässlich und nimmt dem Benutzererlebnis definitiv den Rücken.

Ich bin auf der Suche nach der saubersten Möglichkeit für einen Benutzer, zurück zu klicken und die Seite neu zu laden, so dass das Element Befehlsereignis erneut korrekt ausgelöst wird.

Antwort

0

Es brauchte viel Forschung, um diese Antwort zu finden, so dass hoffentlich andere Leute auf diese Frage stoßen und meine Antwort finden. Ich war erstaunt, dass ich das tatsächlich finden konnte. Ok, genug Schadenfreude.

Da die Seite nicht zurückgesendet wird, wenn der Benutzer auf die Schaltfläche Zurück klickt, werden die Ereignisse nicht korrekt ausgelöst, was zu Problemen mit der nächsten Seite führt. Was passieren muss, ist, dass Sie mit den Navigationstasten des Browsers umgehen können (d. H. Vor und zurück). Dazu müssen Sie EnableHistory im Skript-Manager auf true setzen und das Navigate-Ereignis vom Skript-Manager aus behandeln. Sie können die Steuerelemente dann mithilfe der Informationen, die Sie im Statusobjekt speichern, erneut laden.

Ich habe diese Artikel von Dino Esposito auf DotNetSlackers.com als Referenz verwendet. Server Side History Management und Client Side History Management

0

Der Grund ist, dass Zurück den Seitenlebenszyklus nicht beeinflusst. Es ist definitiv, weil die Seite im Cache gespeichert ist und die zwischengespeicherte Seite nicht auf dem Server ausgeführt wird. Sie können diesen Code versuchen, um dieses Problem zu beheben.

Response.Cache.SetCacheability (HttpCacheability.NoCache);
Response.Cache.SetNoStore();

+0

Ich habe dies versucht, aber dies zwingt den Benutzer, die Seite neu zu laden, anstatt die Seite selbst tun. Dieser Prozess muss nahtlos sein. Der Benutzer sollte nicht unterbrochen werden. Alles, was sie tun müssen, ist zurück zu schlagen und die Seite neu laden zu lassen, ohne dass sie etwas tun müssen. – fizch