所以我有一个UserControl
,其上有一些级联DropDownList
。从列表1中选择启用列表2,列表2依次启用列表3.在所有三个列表中进行选择后,您可以转到下一页。
DropDownList
都位于UpdatePanel
内。但“下一页”按钮位于UpdatePanel
之外。应该禁用该按钮,直到所有三个列表都有选择,然后再次启用它。但由于按钮位于UpdatePanel
之外,因此在进行选择时不会更新。 (修改:“下一页”按钮位于同时包含UserControl
的页面上。)
我知道解决这个问题的一种方法:
var scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterPostBackControl(dropDownList1);
scriptManager.RegisterPostBackControl(dropDownList2);
scriptManager.RegisterPostBackControl(dropDownList3);
这可确保在更改任何下拉列表时进行回发,以便按钮可以更新。但是如果我这样做,我可以通过首先摆脱UpdatePanel
来简化。
有没有其他方法,通过一些聪明的JavaScript或其他东西,我可以在UpdatePanel
之外更新控件而不必放弃Ajax?
答案 0 :(得分:12)
在下一个按钮周围放置一个UpdatePanel,并为每个下拉菜单创建一个触发器,以便它触发异步回发。例如:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="dropDownList1" />
<asp:AsyncPostBackTrigger ControlID="dropDownList2" />
<asp:AsyncPostBackTrigger ControlID="dropDownList3" />
</Triggers>
答案 1 :(得分:7)
您是否可以在“下一页”周围添加更新面板,然后在下拉列表更新面板中添加触发器以触发下一页更新面板?
在没有尝试过的情况下抛弃想法:)
答案 2 :(得分:2)
您可以通过将更新面板放入更新面板并说出update_panel2.update()
来更新更新面板外的控件。
请注意,UpdatePanel的UpdateMode
必须设置为conditional
才能生效。
答案 3 :(得分:1)
理想情况下,这将在javascript中完成,并在click事件处理程序中进行服务器端验证检查。
一个简单的jQuery示例:
//assuming the dropdowns all have the css class "cascade"
$('select.cascade').change(function() {
If ($('option:selected',this).length == 3) {
$('input[id$=btnNext]').removeAttr('disabled');
}
});