如何将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。有没有任何方法可以在代码后面注册触发器的同时自动更新面板?

如何将UpdatePanel设置为在以编程方式注册AsyncPostBackTrigger时自动更新

我找到了这个问题的解决方案。事实证明,您实际上并不需要使用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 });
}
相关文章:
  • 没有找到相关文章