2009-02-02 18 views
12

So habe ich eine UserControl mit einigen kaskadierenden DropDownList s darauf. Die Auswahl aus Liste 1 aktiviert Liste 2, die wiederum Liste 3 aktiviert. Nachdem Sie eine Auswahl in allen drei Listen getroffen haben, können Sie zur nächsten Seite wechseln.Aktualisieren eines Steuerelements außerhalb des UpdatePanels

Die DropDownList s sind alle in einem UpdatePanel. Aber die Schaltfläche "Nächste Seite" befindet sich außerhalb der UpdatePanel. Diese Schaltfläche sollte deaktiviert werden, bis alle drei Listen eine Auswahl haben, und dann sollte sie wieder aktiviert werden. Aber da die Taste außerhalb der UpdatePanel liegt, wird sie nicht aktualisiert, wenn ich eine Auswahl treffe. (bearbeiten: Die „Nächste Seite“ Taste ist auf einer Seite, die auch die UserControl enthält.)

Ich kenne einen Weg, dies zu beheben:

var scriptManager = ScriptManager.GetCurrent(this.Page); 
scriptManager.RegisterPostBackControl(dropDownList1); 
scriptManager.RegisterPostBackControl(dropDownList2); 
scriptManager.RegisterPostBackControl(dropDownList3); 

Dies sorgt für eine Postback, wenn eine Drop-Down-Liste geändert, damit die Schaltfläche aktualisiert werden kann. Aber wenn ich das tue, könnte ich es vereinfachen, indem ich die UpdatePanel in erster Linie loswerde.

Gibt es einen anderen Weg, durch etwas cleveres JavaScript oder etwas, dass ich ein Steuerelement außerhalb eines UpdatePanel aktualisieren kann, ohne auf Ajax verzichten zu müssen?

Antwort

6

Können Sie nicht ein Update-Panel um die "nächste Seite" hinzufügen und dann einen Trigger zum Dropdown-Listen-Update-Panel hinzufügen, um das nächste Seiten-Update-Panel auszulösen?

wirft nur Ideen aus, ohne es versucht zu haben :)

+0

Dies ist am nächsten zu dem, was ich tun musste. Statt eines Triggers musste ich einfach eine Methode auf der Hauptseite aufrufen (casting this.Page), um die Next-Taste richtig zu setzen. Ich musste auch RegisterPostBackControl auf der Schaltfläche Weiter, um es in das UpdatePanel zu arbeiten. –

1

Dies würde in Javascript ideal durchgeführt werden, mit einer serverseitigen Validierungsprüfung in dem Click-Ereignishandler.

Ein schnelles jQuery Beispiel:

//assuming the dropdowns all have the css class "cascade" 
$('select.cascade').change(function() { 
    If ($('option:selected',this).length == 3) { 
    $('input[id$=btnNext]').removeAttr('disabled'); 
    } 
}); 
12

Ein Update um die nächste Taste und einen Trigger für jede der Dropdown-Listen erstellen, so dass es ein asynchrones Postback ausgelöst. Ex:

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="dropDownList1" /> 
    <asp:AsyncPostBackTrigger ControlID="dropDownList2" /> 
    <asp:AsyncPostBackTrigger ControlID="dropDownList3" /> 
</Triggers> 
2

Sie ein Steuerelement außerhalb des Update-Panel, indem sie in update_panel2 platzieren und zu sagen update_panel2.update() upddate kann.

Hinweis: Die UpdateMode des UpdatePanel muss auf conditional gesetzt werden, damit dies funktioniert.

+0

glaub es oder nicht, das hat tatsächlich für mich funktioniert. Danke, Alter. –

Verwandte Themen