2010-02-01 114 views
0

我對我正在處理的一個Web表單有一個奇怪的問題,這似乎與一些正在進行的異步事件有關。基本上,我需要執行以下操作:ASP.NET同步問題

UserInputPanel.Visible = False 
ProgressPanel.Visible = True 
ResultsSet = New DataSet() 
GetResults(ResultsSet) 
FillOutput() 
ProgressPanel.Visible = False 
OutputPanel.Visible = True 

此代碼全部作爲單擊WebForm上的按鈕的結果運行。對GetResults(ResultsSet)的調用很長,因此需要顯示面板ProgressPanel。問題在於,在我的ProgressPanel實際顯示之前,發生了對GetResults的調用。如果我將GetResults和後面的行註釋掉,那麼ProgressPanel就不會出現問題。在GetResults調用發生之前,如何強制前兩行執行並顯示在頁面上?

回答

1

這聽起來像你需要使用UpdateProgress控制,而不是試圖觸發你自己的。當單擊表單按鈕時,在向客戶端發送任何響應之前,服務器端單擊處理器上的所有代碼都會運行。

你需要這樣的事情,而不是你ProgressPanel:

<asp:UpdateProgress ID="UpdateProgress1" runat="server"> 
    <ProgressTemplate> 

    </ProgressTemplate> 
</asp:UpdateProgress> 

ProgressTemplate的內容會自動顯示了when異步回發開始,然後將隱藏一旦它完成。

要隱藏UserInputPanel,創建一個JavaScript函數如下內容(使用jQuery或其他一些客戶端JS的更強大的跨瀏覽器的代碼框架):

function hideUserInput() { 
    document.getElementById('<%=UserInputPanel.ClientID%>').style.visibility="hidden"; 
} 

這個功能附加到按鈕的OnClientClick物業:

<asp:button id="YourButton" 
     text="Submit" 
     onclientclick="hideUserInput()" 
     runat="server" onclick="YourButton_Click" /> 
+0

我看到如何工作 - 但問題是,我仍然需要隱藏UserInput面板,以便用戶不能更新時發生混亂。 – piratepops 2010-02-01 18:29:20

+0

我已經添加了一個如何隱藏'UserInput'面板的例子。 – jball 2010-02-01 18:48:53