我有一个包含两个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()。
有更简单的选择吗?
答案 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期间,两个面板都将更新。