更新UpdatePanel外部的控件

时间:2009-02-02 15:47:24

标签: c# asp.net ajax asp.net-ajax updatepanel

所以我有一个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?

4 个答案:

答案 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');
  }
});