我有一个包含两个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()。
有没有更简单的选择?
来自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 });