2013-02-06 21 views
0

有人可以解釋如何解決這個問題嗎?多個ASP.NET AJAX進度控件

兩個更新面板,兩個進度控件,兩個命令按鈕。

當我點擊第一個按鈕時,我可以看到第一個異步更新的進度。 當我單擊第二個命令按鈕時 - 如果第一個異步操作仍在進行中,第一個進度條消失。我怎樣才能同時顯示兩個進度控制。

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head id="Head1" runat="server"> 
    <title>UpdateProgress Tutorial</title> 
    <style type="text/css"> 
    #UpdatePanel1, #UpdatePanel2 { 
     width:300px; height:100px; 
    } 
    </style> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:ScriptManager ID="ScriptManager1" runat="server"> 
     </asp:ScriptManager> 
     <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
      <ContentTemplate> 
       <fieldset> 
       <legend>UpdatePanel1</legend> 
       <asp:Label ID="Label1" runat="server" Text="Panel initially rendered."></asp:Label> 
       <br /> 
       <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" /> 
       <asp:UpdateProgress ID="UpdateProgress1" runat="server" AssociatedUpdatePanelID="UpdatePanel1"> 
        <ProgressTemplate> 
         Panel1 updating... 
        </ProgressTemplate> 
       </asp:UpdateProgress> 
       </fieldset> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
     <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
      <ContentTemplate> 
       <fieldset> 
       <legend>UpdatePanel2</legend> 
       <asp:Label ID="Label2" runat="server" Text="Panel initially rendered."></asp:Label> 
       <br /> 
       <asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" /> 
       <asp:UpdateProgress ID="UpdateProgress2" runat="server" AssociatedUpdatePanelID="UpdatePanel2"> 
        <ProgressTemplate> 
         Panel2 updating.... 
        </ProgressTemplate> 
       </asp:UpdateProgress> 
       </fieldset> 
      </ContentTemplate> 
     </asp:UpdatePanel> 

    </div> 
    </form> 
</body> 
</html> 

代碼

protected void Button1_Click(object sender, EventArgs e) 
{ 
    // Introducing delay for demonstration. 
    System.Threading.Thread.Sleep(10000); 
    Label1.Text = "Page refreshed at " + 
     DateTime.Now.ToString(); 
} 

protected void Button2_Click(object sender, EventArgs e) 
{ 
    // Introducing delay for demonstration. 
    System.Threading.Thread.Sleep(15000); 
    Label2.Text = "Page refreshed at " + 
     DateTime.Now.ToString(); 

} 
+0

如果我發現一段時間後我會再次播放更多的細節。當您進行第二次通話時,您所做的第一篇文章不會取消,並且第二個通話被鎖定,並且因爲會話鎖定而等待第一個通話。 – Aristos

+0

謝謝你的時間。我想我刪除了我以前的評論。我不再看到他們。現在我將結合單個異步調用中的多個數據庫更新和單個進度控制。 –

回答

0

一般網絡在請求 - 響應的基礎上工作。當頁面發送請求時,它應該等待響應。如果頁面重新發送[或發送新的]請求舊的響應將被忽略,並將等待響應新的請求。

爲了避免這種情況發生在Ajax隊列請求中,並且一旦接收到響應,就發送一次。 [或以其他方式,你可以說在頁面上工作爲單線程]

在你的情況下,第一個進度條不應該消失,即使在它看到它等待迴應後面。這可以固定使用一些JavaScript,但沒有任何的框外支持。

或者您可以使用Iframe來真正發送同時多個請求。