如何将UpdatePanel设置为在以编程方式注册AsyncPostBackTrigger时自动更新
本文关键字:AsyncPostBackTrigger 注册 方式 更新 编程 UpdatePanel 设置 | 更新日期: 2023-09-27 18:26:37
我有一个按钮,它将触发UpdatePanel,但它在不同的容器中,所以如果我把我的代码放在下面:
<asp:UpdatePanel ID="uptxtQuickSearch" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false" style="height: 100%;">
<ContentTemplate>
<asp:TextBox ID="txtQuickSearch" CssClass="textinput" onmouseover="this.select()" onfocus="this.select()" onkeydown="QuickSearch()" runat="server"></asp:TextBox>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnSearchFilter" />
</Triggers>
</asp:UpdatePanel>
将出现运行时服务器错误:"在UpdatePanel"upxtQuickSearch"中找不到触发器的ID为"btnSearchFilter"的控件。"
所以我必须在ScriptManager:的Page_load事件中注册它
ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
scriptManager.RegisterAsyncPostBackControl(btnSearchFilter);
但在这种情况下,我仍然需要在btnSearchFilter_click事件结束时使用update()方法手动更新UpdatePanel。有没有任何方法可以在代码后面注册触发器的同时自动更新面板?
我找到了这个问题的解决方案。事实证明,您实际上并不需要使用RegisterAsyncPostBackControl
方法来注册控件。
您只需要在Page_Init
事件上添加触发器,并在运行时找不到控件时使用control.UniqueID
。
因此aspx将是这样的:
<asp:UpdatePanel ID="uptxtQuickSearch" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false" style="height: 100%;">
<ContentTemplate>
<asp:TextBox ID="txtQuickSearch" CssClass="textinput" onmouseover="this.select()" onfocus="this.select()" onkeydown="QuickSearch()" runat="server"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
在代码背后:
protected void Page_Init(object sender, EventArgs e)
{
uptxtQuickSearch.Triggers.Add(new AsyncPostBackTrigger() { ControlID = btnSearchFilter.UniqueID });
}