2011-12-23 108 views
0

這可能是一件非常簡單的事情。基本上,用戶點擊一個按鈕併發生潛在的長時間運行的任務。我想做一些事情,例如切換按鈕的啓用狀態,顯示微調等。在VB.NET Winforms中,我只是執行Application.DoEvents()並且更新將會發生並且代碼可以繼續。我怎樣才能在ASP.NET中做到這一點? (最好的服務器端或最小的JavaScript)長期提交ASP.NET反饋

回答

1

有幾種方法可以在ASP.Net中實現,具體取決於您的要求。啓動流程相當簡單,但要從客戶端完成監控,需要在服務器和客戶端進行更多的工作。

解決方案的基本輪廓是:

1)啓動一個動作在客戶端上執行一些動作。例如,您可以將整個頁面重新發布到單擊按鈕上,發起ajax請求,或者進行部分頁面回發,具體取決於您需要從頁面獲取多少信息。

2)在服務器端,使用BackgroundWorker啓動任務,在工作流隊列中創建一個條目,或將請求存儲在由負責執行操作的服務監視的數據庫表中。

3)回到客戶端,使用javascript啓動一個window.timeout循環,當它超時時,向web服務器發出一個ajax請求來檢查完成情況。使用像這樣的超時循環將確保UI保持響應,並且所顯示的任何動畫都將正確顯示。你如何檢查完成將取決於你的服務器端實現是如何設計的,但幾乎肯定會需要一個數據庫。

我們用下面的一般方法用於啓動從web客戶端,它可以是長期運行報告:

當用戶發起的報告,使用JavaScript打開一個新窗口,以報告生成頁面在客戶端上,傳遞足夠多的參數來啓動它。打開一個單獨的窗口允許用戶繼續工作,但仍然看到發生了一些事情。

報表頁面的用戶界面基本上包含一個動畫GIF,以便用戶知道正在發生的事情。

當報告頁面最初加載到服務器上時,它會生成一個唯一的ID用於監視報告的狀態並將其嵌入到JavaScript中以用於監視狀態。然後它將此唯一標識符存儲在包含唯一標識和狀態列的數據庫表中,初始化要請求的狀態。

數據庫條目一旦建立,頁面就會觸發BackgroundWorker以啓動操作,然後將頁面返回給用戶。

當頁面顯示時,javascript會啓動一個window.timeout循環,該循環週期性地向Web服務器發出ajax請求,然後使用先前創建的唯一標識符檢查數據庫中的報告狀態。

當backgroundworker成功完成報告或失敗時,它會使用狀態,報告位置或錯誤消息更新數據庫表並終止。

當javascript循環發現報告生成已完成時,它會向用戶顯示錯誤消息或報告。

希望這可以爲您解決問題提供一些建議。

1

與此問題可能是,一旦頁面發佈,你不能更新頁面的其他部分。 您可以使用多個asp:updatepanel並與其他更新面板通信,從而導致面板中的狀態發生更改。 看看這個鏈接:

http://www.ajaxtutorials.com/ajax-tutorials/tutorials-using-multiple-updatepanels-in-net-3-5-and-vb/ 

它會告訴你如何做到這一點。