2012-09-04 19 views
1

我有一個服務器操作,通常需要大約15分鐘才能完成。我希望在操作過程中向用戶傳達操作的各個階段。如何在非常長的服務器操作期間更新狀態標籤?

這裏是我的表單代碼:

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" > 
    <ContentTemplate> 
     <asp:Timer ID="Timer1" runat="server" Interval="300" ontick="Timer1_Tick"> 
     </asp:Timer> 
     <asp:Label ID="lbl_Status" runat="server" Text=""></asp:Label> 
    </ContentTemplate> 
</asp:UpdatePanel> 

</div> 

<asp:FileUpload ID="upl_UserList" runat="server" /> 

<p> 

    <asp:Button ID="btn_Update" runat="server" Text="Update Users" 
     onclick="btn_Update_Click" /> 

</p> 
</form> 

...和我的Tick事件處理程序:

protected void Timer1_Tick(object sender, EventArgs e) 
    { 
     lbl_Status.Text = labelText; 
     lbl_Status.ForeColor = labelColor; 
    } 

在用戶點擊更新按鈕時,瀏覽器將卡住等待服務器響應。這會導致標籤不能更新。

我應該如何解決這個問題,我應該使用iframe嗎?

+0

嘗試將處理轉移到一個單獨的服務,15分鐘的過程中一個Web請求運行是一個壞主意。 – BNL

+0

我認爲最終這將是一個不需要用戶輸入的自動化功能。現在我們使用一個控件來調試腳本。 – ZeroDivide

回答

0

添加該代碼

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> 
    </Triggers> 

您更新面板之後將代碼和移動你的計時器:

<asp:Timer ID="Timer1" runat="server" Interval="300" ontick="Timer1_Tick"> 
    </asp:Timer> 

    <asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server"> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> 
     </Triggers> 
     <ContentTemplate> 
      <asp:Label ID="lbl_Status" runat="server" Text=""></asp:Label> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
相關問題