Wie fülle ich eine asp: DropDown-Client-Seite?

9

Ich habe eine Webseite mit zwei <asp:DropDown> Steuerelementen:

Wenn der Benutzer ein Land auswählt, möchte ich die Liste der Zustände ausfüllen.

Versuch # 1 - OnSelectedIndexChanged

Die erste Sache war ziemlich einfach: Füllen Sie die zweite Box in OnSelectedIndexChanged der ersten Dropdown-Liste:

%Vor%

Das hat gut funktioniert, außer dass es eine Seitenaktualisierung auslöst. Der Benutzer wird unterbrochen, während der Post gesendet wird, und die Seite wird neu geladen. Und die Seite ist nicht mehr dort, wo sie sie verlassen hat, und sie sitzen nicht länger im Drop-down.

Versuch # 2 - Old fashioned kluddy UpdatePanels

@Seglo nennt UpdatePanels einen altmodischen Klotz . Aber da ich nichts besseres finde - lass es uns versuchen! Wickeln Sie das Zeug in ein Update-Panel, und lassen Sie es tun, es ist Magie:

Das Problem dabei ist, dass bei der Aktualisierung von UpdatePanel beide Steuerelemente gelöscht und durch neue ersetzt werden. Dies bedeutet, dass der Benutzer seinen Fokus im ersten Dropdown verloren hat. Leute haben vorgeschlagen, schreckliche Kludges mit Javascript zu versuchen, den Fokus zu speichern und wiederherzustellen . Aber ich würde die Dinge lieber richtig machen.

Versuch # 3 - Nur UpdatePanel, was Sie aktualisieren müssen

Ich muss das Land -Dropdown (oder die Labels) nicht aktualisieren . ich brauche nur , um das Dropdown-Menü Status zu aktualisieren. Warum also nicht nur in ein <asp:UpdatePanel> einbinden? In der Tat ist dies die Antwort, die in StackOverflow vorgeschlagen wird :

Und das funktioniert. Das Dropdown-Menü Land verliert nicht den Fokus. Das OnSelectedIndexChanged -Ereignis wird ausgelöst und das Status -Dropdown füllt sich ...

... das erste Mal, wenn ich das Länder-Dropdown ändere.

Wenn ich das Land erneut ändere, wird eine Ausnahme ausgelöst:

  

Ungültiges Postback- oder Callback-Argument.

Irgendwie verwirrt das updatepanel mit den WebForms-Steuerelementen; die Postback-Daten ungültig machen. Dies ist sinnvoll, da durch das Mischen mit WebForms-Steuerelementen die Postback-Daten ungültig werden.

Versuch # 4 - Versuchen Sie, selbst ein Postback mit Javascript

zu fälschen

Es bringt dir nichts; aber Leute haben versucht, ein Postback manuell durch Javascript auszulösen :

%Vor%

Mit Ausnahme von ClientID von cbCountry und UpdatePanel1 wird das Skript nicht ausgeführt. noch weiß ich nicht, ob es mein Problem lösen kann

Versuch # 5 - Verwenden Sie PageMethods , um die Statusliste abzurufen.

Jetzt verbinde ich nur die zufälligen Vorschläge anderer Leute. Es dauert ungefähr 4 Stunden, um einen Vorschlag umzusetzen. Was bedeutet, dass ich eineinhalb Tage verloren habe, um eine Combo-Box zu füllen.

Ich kann es mir nicht leisten, bei jedem zufälligen Vorschlag, den ich bei Google finde, einen Tag zu verlieren; Ich brauche eine tatsächliche Antwort. Also schließe ich sie nur ein, um den mürrischen Leuten zu zeigen, dass es Forschungsbemühungen gab (als ob die Forschungsanstrengungen wichtig wären).

Einige Leute haben vorgeschlagen, ASP.net aufzurufen. co_de%, und aktualisieren Sie die PageMethods in Client-JavaScript :

%Vor%

Problem hier ist das gleiche bei Versuch # 2. Der Viewstate wird falsch sein, weil ich mit der Form hinter dem Rücken von ASP.net muckte.

Es scheint ein fundamantales Problem zu geben, dass ASP.net und viewstate grundsätzlich nicht mit clientseitigen DOM-Updates kompatibel sind. Jeder Versuch, eine Seite clientseitig zu ändern, macht das gesamte ASP.net-Webformular-Programmiermodell ungültig.

    
Ian Boyd 28.06.2012, 20:34
quelle

5 Antworten

1

Benutze das AJAX Control Toolkit ... es hat einen CascadingDropDown, der perfekt wäre! :)

Ссылка

    
Nerdwood 12.04.2013 15:59
quelle
0

Das Aktualisieren der DropDownList -Steuerelemente mithilfe von JavaScript ändert nicht den Viewstatus, was bedeutet, dass in jedem Post die Änderungen außer Kraft gesetzt werden.

Ich habe etwas ähnliches gemacht, um JSON den Inhalt der Listen in versteckten Feldern zu serialisieren und dann in Server-Code auf jedem Beitrag zu deserialisieren

Dies ist eine Antwort, die ein vollständiges Arbeitsbeispiel zeigt, um etwas Ähnliches zu zeigen (überprüfen Sie die akzeptierte Antwort).

ASP.NET jQuery doppelte Listbox bearbeiten und speichern

Bearbeiten 1

BTW Um loszuwerden:

  

Ungültiges Postback- oder Callback-Argument.

Sie können die Viewstate-Validierung deaktivieren. Dies wird jedoch nicht empfohlen. Sie sollten dies nur tun, wenn Sie sich in einem Intranet befinden, in dem Sie die meiste Zeit den Benutzern vertrauen können

%Vor%     
Jupaol 28.06.2012 20:52
quelle
0

Ich habe einen Trick und es funktioniert. Es verwendet eine ausgeblendete Schaltfläche im selben Aktualisierungsbereich wie die Dropdown-Liste "Status".

%Vor%

Code dahinter:

%Vor%     
phnkha 03.01.2013 17:28
quelle
0

Bezogen auf Versuch Nr. 1, um das Problem der Seitenposition zu lösen, können Sie versuchen, dies im aspx-Seitenheader

zu verwenden %Vor%

und registrieren Sie ein Javascript in der Methode cbCountry_SelectedIndexChanged , um den Fokus auf die Status-Combobox zu setzen.

    
Giuseppe Bosso 12.04.2013 13:57
quelle
-2

Gehe zur Einstellung der Dropdown-Liste

Setzen Sie AutoPostBack = True,

    
melaouhia mohamed amine 14.12.2012 14:24
quelle

Tags und Links