单个页面上有多个UpdateProgress控件

本文关键字:UpdateProgress 控件 单个页 | 更新日期: 2023-09-27 18:14:57

我有一个有几个UpdatePanel控件的页面,每个控件都有一个相关的UpdateProgress。当异步请求返回时,只显示第一个UpdateProgress控制。其他请求成功完成,但是没有显示UpdateProgress

如何使页面上的所有更新面板正确显示?

下面是一个例子,显示了这个问题(对不起,它有点长):

aspx文件:

<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
  <ContentTemplate>
    <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Enabled="true" Interval="1000" />
    <asp:Label ID="Label1" runat="server" />
  </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
  <ProgressTemplate>Updating...</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
  <ContentTemplate>
    <asp:Timer ID="Timer2" runat="server" OnTick="Timer2_Tick" Enabled="true" Interval="2000" />
    <asp:Label ID="Label2" runat="server" />
  </ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="UpdateProgress2" runat="server" AssociatedUpdatePanelID="UpdatePanel2">
  <ProgressTemplate>Updating...</ProgressTemplate>
</asp:UpdateProgress>
后台代码:

protected void Timer1_Tick(object sender, EventArgs e) {
    System.Threading.Thread.Sleep(1000);
    Timer1.Enabled = false;
    Label1.Text = DateTime.Now.ToString("HH:mm:ss");
}
protected void Timer2_Tick(object sender, EventArgs e) {
    System.Threading.Thread.Sleep(1000);
    Timer2.Enabled = false;
    Label2.Text = DateTime.Now.ToString("HH:mm:ss");
}

单个页面上有多个UpdateProgress控件

我刚刚发现,如果我把UpdateProgress 之前相应的UpdatePanel

<asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1">
  <ProgressTemplate>Updating...</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="true">
  <ContentTemplate>
    <asp:Timer ID="Timer1" runat="server" OnTick="Timer1_Tick" Enabled="true" Interval="1000" />
    <asp:Label ID="Label1" runat="server" />
  </ContentTemplate>
</asp:UpdatePanel>