ASP.NET: Scrolle zum Steuerelement

8

Ich habe eine besonders große Form in einer Seite. Wenn das Formular validiert wird und ein Feld ungültig ist, möchte ich das Fenster zu diesem Steuerelement scrollen. Der Aufruf des Focus () des Steuerelements scheint dies nicht zu tun. Ich habe eine JavaScript-Problemumgehung gefunden, um das Fenster zum Steuerelement zu scrollen, aber ist irgendetwas in ASP.NET integriert?

    
core 14.04.2009, 02:04
quelle

9 Antworten

6
%Vor%     
Lead1000 20.09.2012 19:31
quelle
5

Verwenden Sie eine Validierungszusammenfassung auf Ihrer Seite?

Wenn ja, ASP.NET rendert Javascript um automatisch zum Anfang der Seite zu scrollen , was möglicherweise das automatische Verhalten der clientseitigen Validierung außer Kraft setzt, um das letzte ungültige Steuerelement zu fokussieren.

Haben Sie auch die Validierung der Clientseite deaktiviert?

Wenn Sie sich das von der clientseitigen Validierung generierte Javascript ansehen, sollten Sie folgende Methoden sehen:

%Vor%

Beachten Sie den Aufruf von ValidatorSetFocus, einer ziemlich langen Methode, die versucht, den Fokus auf das fragliche Steuerelement oder bei mehreren Fehlern auf das letzte Steuerelement, das validiert wurde, zu setzen. Dabei werden (möglicherweise) die folgenden Zeilen verwendet:

%Vor%

Damit dieses Verhalten funktioniert, sollten Sie idealerweise sicherstellen, dass alle Ihre Validatoren als clientseitig festgelegt sind. Server-seitige Validatoren erfordern offensichtlich ein Postback, das sich auf Dinge auswirken kann (z. B. Fokus / Position verlieren). und das Setzen von MaintainScrollPositionOnPostBack auf True würde wahrscheinlich dazu führen, dass die Seite erneut auf die Übermittlungsschaltfläche geladen wird, anstatt das ungültige Formularelement.

Verwendung der Server-Seite. Die Focus-Methode bewirkt, dass ASP.NET beim Laden der Seite etwas JavaScript "raufruft" (dh am unteren Rand der Seite), aber dies könnte durch einen der anderen oben genannten Mechanismen überschrieben werden.

    
Zhaph - Ben Duguid 15.04.2009 00:00
quelle
5

SO Ich glaube, das Problem liegt daran, dass ich versucht habe, mich auf HtmlGenericControls anstatt auf WebControls zu konzentrieren.

Ich habe gerade einen Workaround gemacht, basierend auf:

Ссылка Ссылка

... im Interesse der Zeit.

%Vor%

Verwendung:

%Vor%

(Obwohl es scheint, dass Page.RegisterClientScriptBlock () für Page.ClientScript.RegisterClientScriptBlock ()) veraltet ist.

    
core 14.04.2009 23:59
quelle
2

Das Hinzufügen von MaintainScrollPositionOnPostback ist das nächste, das ASP.NET eingebaut hat, springt aber nicht unbedingt zu den ungültigen Feldern.

%Vor%     
Lance Harper 14.04.2009 02:08
quelle
2

Sehr einfache Lösung ist, die SetFocusOnError-Eigenschaft des RequiredFieldValidator (oder welches Validator-Steuerelement Sie verwenden) auf True

festzulegen     
Stephen Lacy 01.06.2010 10:35
quelle
1

Sind Sie sicher, Focus () wird dies nicht tun Mach was du beschreibst? Unter der Haube macht es im Wesentlichen die "JavaScript Workaround" - es schreibt einige JS auf die Seite, die focus () auf das Steuerelement mit der passenden ID aufruft:

Welches Steuerelement Focus () zuletzt aufgerufen hat, bevor die Seite die Verarbeitung beendet, schreibt dies auf die Seite:

%Vor%     
Rex M 14.04.2009 02:08
quelle
0

Sie sollten sich jQuery und das ScrollTo-Plugin ansehen

Ссылка

    
Superdumbell 14.04.2009 02:07
quelle
0

Ich habe etwas Ähnliches mit einfachen HTML-Fragmenten erreicht. Sie hinterlassen nur ein Element mit einer bekannten ID:

%Vor%

Und dann entweder per Skript, auf der Serverseite die URL ändern:

%Vor%

Im ersten Fall wird die Seite nicht neu geladen, sondern nur nach unten zum Steuerelement gescrollt.

    
DreamSonic 14.04.2009 23:39
quelle
0

Fügen Sie das folgende Javascript ein:

%Vor%

Rufen Sie dann ScrollToFirstError () in Ihrem OnClientClick des zu speichernden Buttons auf und stellen Sie sicher, dass der Button CausesValidation = true hat.

Da hast du es.

    
emalamisura 28.02.2012 15:54
quelle

Tags und Links