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

时间:2009-01-06 16:11:46

标签: asp.net ajax updatepanel

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

如果DropDown的selectedItemChanged事件位于不同的ContentPlaceholder中,如何触发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()。

有更简单的选择吗?

3 个答案:

答案 0 :(得分:22)

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

  

控制权   AsyncPostBackTrigger引用必须   与...相同的命名容器   它所属的更新面板   触发。基于的触发器   其他命名容器中的控件   不受支持。

解决方法是使用控件的UniqueID 触发器正在引用。不幸的是,UniqueID不合格 直到控件已添加到其父级(及其父级) 已被添加到其父级,一直到控制树)。

在您的代码中,请尝试:

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

答案 1 :(得分:3)

在代码隐藏文件中,您应该能够:

ScriptManager.RegisterAsyncPostBackControl(dropdown1);

答案 2 :(得分:2)

您可以通过服务器端的调用updatePanel1.Update()方法强制更新任何页面UpdatePanel。 例如,在button1.Click呼叫updatePanel2.Update()上更新updatePanel1期间,两个面板都将更新。