Was ist der beste Weg, um die Bildlaufposition nach einem asynchronen Postback an den Anfang der Seite zurückzusetzen?
Das asynchrone Postback wird von einer ASP.NET GridView CommandField-Spalte initiiert und die Update-Methode von ASP.NET Update wird im GridView OnRowCommand aufgerufen.
Meine aktuelle Anwendung ist eine ASP.NET 3.5-Website.
BEARBEITEN: Ich habe von allen ein ausgezeichnetes Feedback erhalten und habe die Methode PageRequestManager in einem Skript-Tag beendet, aber meine nächste Frage lautet:
Wie konfiguriere ich es so, dass es nur ausgeführt wird, wenn der Benutzer auf das ASP.NET-Befehlsfeld in meinem GridView-Steuerelement klickt? Ich habe andere Schaltflächen auf der Seite, die ein asynchrones Postback durchführen, das ich nicht zum Anfang der Seite scrollen möchte.
EDIT 1: Ich habe eine Lösung entwickelt, bei der ich den PageRequestManager nicht benutzen muss. Siehe meine Antwort für die Lösung.
Hier ist die folgende Lösung, die ich basierend auf dieser Quelle
entwickelt habeASP.NET-Webformular
%Vor%ASP.NET Webform-Code hinter
%Vor%Da Sie UpdatePanels verwenden, müssen Sie sich in den PageRequestManager von ASP.NET AJAX einklinken
Sie müssen den endRequest -Ereignis-Hooks, die: Wird ausgelöst, nachdem ein asynchrones Postback beendet wurde und die Kontrolle an den Browser zurückgegeben wurde. Sie hätten also etwas wie: Dadurch wird der Browser gezwungen, nach Abschluss einer Aktualisierungsanforderung zurück zum Anfang der Seite zu scrollen. Natürlich gibt es andere Ereignisse, an denen Sie teilnehmen könnten: Das Schöne an asynchronen Postbacks ist, dass die Seite die Bildlaufhöhe beibehält, ohne dass Sie MaintainScrollPosition einstellen müssen, da kein "Neuladen der vollen Seite" stattfindet. In diesem Fall möchten Sie diesen Effekt tatsächlich haben muss es manuell erstellen. Bearbeiten, um auf die aktualisierte Frage zu antworten Ok, wenn Sie die Position nur bei bestimmten Tastendrücken zurücksetzen müssen, müssen Sie Folgendes tun: Beginnen Sie, indem Sie stattdessen in BeginRequest einhaken: Dies liegt daran, dass Sie im args-Parameter Zugriff auf Folgendes erhalten: Dies sagt Ihnen die ID der Schaltfläche, mit der das gesamte Ereignis gestartet wurde. Sie können dann entweder den Wert hier überprüfen und die Seite verschieben oder in einer Variablen speichern und sie in der Endabfrage abfragen Race Conditions usw., bei denen der Benutzer vor dem ursprünglichen Update auf eine andere Schaltfläche klickt. Das sollte Sie mit etwas Glück in Schwung bringen - es gibt einige Beispiele dafür auf Mit PageRequestManager Events arbeiten
Hier ist die perfekte Lösung, um die Position der Bildlaufleiste in AJAX auf TOP zu setzen
Clientseitiger Code
%Vor%Serverseitiger Code
%Vor%Nur window.scrollTo (0,0) wird nicht funktionieren. Ajax hat in diesem Fall Vorrang, also müssen Sie die setTimeout-Funktion verwenden.
Verwenden Sie asp.net AJAX? Wenn dies der Fall ist, gibt es zwei sehr nützliche Ereignisse in den Client-Bibliotheken BeginRequest und EndRequest, eines der Probleme mit partiellen / asynchronen Postbacks, ist, dass die allgemeine Seite keine Ahnung hat, was Sie tun. Die Begin- und EndRequest-Ereignisse ermöglichen es Ihnen, die Scroll-Position auf dem Client beizubehalten. Sie können eine Variable in js haben, die auf die Scroll-Position gesetzt wird, dann können Sie auf Ende-Anfrage die ScrollTop-Funktion des jeweiligen Elements zurücksetzen Sicher habe ich das schon mal gesehen aber finde keinen Link. kranke Posten, wenn ich ein Beispiel finde
Haben Sie die Seiteneigenschaft MaintainScrollPosition gesetzt? Nicht sicher, ob das anders wäre, wenn du ein Async-Postback machst oder nicht.
Bearbeiten: Eine Sache, die Sie versuchen könnten, ist, den Fokus auf einen bestimmten Gegenstand in der Nähe des oberen Randes Ihrer Seite zu setzen, was hilfreich sein kann und eine schmutzige Arbeit sein kann.
Ich verwende einen versteckten Input namens hScrollTop, den ich gesetzt habe, bevor das asp.net-Formular zurückgeschickt wird. Wenn die Seite dann geladen wird, wird der scrollTop-Wert entsprechend dem Wert des ausgeblendeten Eingangs festgelegt.
Versuchen Sie diesen Code auf einer neuen Seite.
%Vor%Tags und Links c# asp.net scroll-position asp.net-ajax gridview