小编典典

通过不同ContentPlaceHolder中的控件触发UpdatePanel的更新

ajax

我有一个包含两个ContentPlaceHolders的页面。一个具有DropDown,另一个具有内容的UpdatePanel。

当它们位于不同的ContentPlaceholders中时,如何通过DropDown的selectedItemChanged事件触发对UpdatePanel的更新?

由于UpdatePanel1不了解DropDown1,因此以下操作无效:

<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"  ChildrenAsTriggers="true">
    <ContentTemplate>
        Some content that needs to be updated here...
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="DropDown1" EventName="SelectedIndexChanged" />
    </Triggers>
</asp:UpdatePanel>

一种方法是制作一个Ajax页面方法,当选择DropDown的项目时,该页面上的javascript将调用该方法。然后在该页面方法内的后面代码中,调用UpdatePanel1.Update()。

有没有更简单的选择?


阅读 266

收藏
2020-07-26

共1个答案

小编典典

来自http://msdn.microsoft.com/zh-
cn/library/system.web.ui.asyncpostbacktrigger.aspx

AsyncPostBackTrigger引用的控件必须与作为触发器的更新面板位于同一命名容器中。不支持基于其他命名容器中的控件的触发器。

解决方法是使用触发器所引用的控件的UniqueID。不幸的是,直到将控件添加到其父级(并且其父级一直添加到其父级,一直到控件树的顶部)之前,UniqueID才合格。

在后面的代码中,尝试:

UpdatePanel1.Triggers.Add(new AsyncPostBackTrigger()
{
    ControlID = DropDown1.UniqueID,
    EventName = "SelectedIndexChanged", // this may be optional
});
2020-07-26