【问题标题】:How to use UpdateProgress if control Button is outside UpdatePanel如果控制按钮在 UpdatePanel 之外,如何使用 UpdateProgress
【发布时间】:2026-02-07 06:00:01
【问题描述】:

我有一个 TextBox 和一个 Button,当我按下这个按钮时,gridview 会根据我在 TextBox 中写入的数据进行绑定。它的数据非常大,因此在 GridView 中搜索、绑定和显示数据需要时间。所以我想像加载图像一样使用UpdateProgress 但我的 GridView 在 UpdatePanel 中。

当我按下搜索按钮时会发生回发,因为我在 UpdatePanel 中不包括 TextBox 和 Button。我已经尝试过了,但无法实现所需的功能。

<asp:UpdateProgress AssociatedUpdatePanelID= "UpdatePanel1" ID="UpdateProgressSearch"  runat="server">
        <ProgressTemplate>
        <asp:Image ID="ImageSearch" ImageUrl="images/updateProgress.gif" runat="server"/>
        </ProgressTemplate>
        </asp:UpdateProgress>

问候, 维韦克

【问题讨论】:

  • 把所有的控件放到更新面板中。我个人避免使用更新面板。有很多方法可以通过 javascript 加载加载器。
  • 是的,我不想将所有控件都放在 UpdatePanel 中。请提出这些方法
  • 我认为您无法实现所需的功能。我坚持认为更容易使用 javascript。几年前我遇到了这个问题,我通过更新面板。
  • 对于那些仍在寻找解决方案的人,您只需删除 AssociatedUpdatePanelID="UpdatePanel1"。如果您进行回发,此属性很有用,但在您的情况下,UpdatePanel1 没有回发。
  • 嗨。 @vivek jain,只是想知道您是否设法做到这一点,因为需要相同的功能。

标签: c# asp.net updatepanel updateprogress


【解决方案1】:

如果您的 Button 控件不在更新面板内,您需要在按钮控件中添加异步回发标签。如下

<asp:Button runat="server" Text="btnFind"  Onclick="btnFind_Click"/>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <ContentTemplate>
      <!-- Your Work Goes Here (your grid view control is here)-->
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnFind" EventName="OnClick" />      
     </Triggers>
</asp:UpdatePanel>

【讨论】:

  • 感谢您的回复,我也试过了。但这不是我想要的。单击按钮后加载 GridView 时不显示 UpdatePregress 图像
【解决方案2】:

您必须添加带有搜索按钮的异步回发触发器作为控件,并将事件名称作为事件名称单击到更新面板的触发器集合中

<Triggers>
    <asp:AsyncPostBackTrigger ControlID="[your search button id]" EventName="Click" />      
</Triggers>

尝试使用简单的文本而不是像“正在加载..或更新..”这样的图像,如果更新面板更新时会显示,那么问题出在图像 url,所以再次检查并更新它。

编辑:

确保您已在表单中添加脚本管理器。

更新完整代码

<asp:Button ID="btnSearch" runat="server" OnClick="btnSearch_Click" Text="Search" />
    <asp:TextBox ID="txtSearch" runat="server"></asp:TextBox>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            your data to update in your case gridview
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnSearch" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
        <ProgressTemplate>
            Loading...
        </ProgressTemplate>
    </asp:UpdateProgress>

【讨论】:

  • AsyncPostBackTrigger 只有 ControlID 属性而不是 EventName。
  • @vivekjain 该属性在那里查看更新的完整代码
  • 无法看到 ProgressTemplate 中的内容 :(
最近更新 更多