Zurücksetzen der Bildlaufposition nach dem asynchronen Postback - ASP.NET

7

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.

    
Michael Kniskern 05.03.2009, 19:14
quelle

8 Antworten

4

Hier ist die folgende Lösung, die ich basierend auf dieser Quelle

entwickelt habe

ASP.NET-Webformular

%Vor%

ASP.NET Webform-Code hinter

%Vor%     
Michael Kniskern 05.03.2009, 21:22
quelle
15

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:

%Vor%

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:

%Vor%

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:

%Vor%

Dies liegt daran, dass Sie im args-Parameter Zugriff auf Folgendes erhalten:

%Vor%

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

    
Zhaph - Ben Duguid 05.03.2009 20:04
quelle
11

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.

    
Nimesh Modi 04.06.2009 15:58
quelle
2

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

    
Matt 05.03.2009 20:06
quelle
2

aus diesem Tutorial:

Ссылка

Wir setzen MaintainScrollPositionOnPostback = true

Wenn wir die Bildlaufposition zurücksetzen müssen, rufen Sie die Methode auf:

%Vor%     
chrisg 07.03.2009 01:25
quelle
0

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.

    
TheTXI 05.03.2009 19:21
quelle
0

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%     
mhelexient 05.03.2009 22:02
quelle
0
%Vor%

Setzen Sie das obige auf die Funktion, die Sie sagen möchten, um zum Anfang der Seite zu gelangen. Wie wenn die Seite nicht gültig ist, haben Sie das dort und es wird temporäres Javascript hinzugefügt, um Sie zum Anfang der Seite zu schießen.

    
Dmitriy 26.03.2012 16:34
quelle