2010-05-13 88 views
4

我在ASP.NET/C#中有一個簡單的網頁。目前爲了完全呈現數據,我需要調用在後臺線程上運行的代碼塊,並可能需要幾分鐘才能完成。我已經明白了這一點(使用頁面聲明中的異步屬性)來執行,並在完成後用html返回。我希望它能讓我立即返回某種類型的「加載頁面」,然後在後臺工作完成後更新該頁面。現在,當後臺工作正在處理時,我在頁面上什麼都沒有得到。任何想法,最好的方式或聰明的方式來做到這一點將不勝感激!'正在加載'異步調用網頁

感謝,

西格

回答

0

有來實現你的描述使用Ajax什麼,但很多方面,如果你想保持它非常簡單,你可以簡單地Flush()之前,你的一些加載屏幕響應啓動長時間運行的任務:

<div> 
    Loading.. 
    <% Response.Flush(); %> 
    <% System.Threading.Thread.Sleep(5000); %> 
    Done! 
</div> 
+0

嘗試,一個和喜歡這個主意,因爲它似乎很好的和簡單的。然而,雖然它最初似乎起作用,但最終失敗了,因爲它無法保存會話。 – Sieg 2010-05-14 15:59:06

0

你想要什麼叫做HTTP Server PushHTTP流媒體長輪詢。取決於如何完成。

有很多在網絡上的例子,文章還解釋了深入的問題。我首先研究這些。

您也可以看看這個HTTP流...

Cross-browser implementation of "HTTP Streaming" (push) AJAX pattern

有到有一個偉大的介紹文章的鏈接SO問題。

或者這一個與長輪詢

How do I implement basic "Long Polling"?

https://stackoverflow.com/questions/tagged/long-polling

希望這有助於的一個例子。

1

我同意上述發佈的評論。

然而,我會和有但使用ashx(處理程序)作爲一個單獨的頁面實現「處理器」,因爲這些真的很簡單,從JavaScript調用和輪詢,你只需編寫進程請求事件饋送東西進入響應流。

我很想在我的網站上向您展示一個示例,但我的主機決定在我們的網站上運行一週,而他們在服務器上更新.net(您可以想象我對此並不特別滿意)。

雖然本質上我來說,我有一個依賴於數據從一個頁面: 英國廣播公司 谷歌 亞馬遜 的YouTube 一些其他的隨機位置。

該頁面返回給用戶,並在頁面上各個控件然後進行Ajax調用回服務器及其零部件。

反饋數據將被加載到的標籤的默認內容是一個簡單的動畫gif圖像,看起來非常像flash或silverlight加載循環。

數據返回後,gif被服務器饋送的內容替換。

這意味着客戶端看到「正在加載」並且服務器正在忙於處理客戶端需要的所有內容(看起來似乎是同步的)。

這是一個乾淨的用戶體驗,代碼非常簡單。

當我看着如何使用silverlight進行文件上傳時,我絆倒了這個想法。

基本概念:

  1. Ajax調用 「ashx的」。 (可能是10行javascript)
  2. 服務器進程請求。 (取決於請求的複雜性,使用查詢字符串傳遞的變量)
  3. 響應在其他完整頁面上填充1個元素。 (AJAX cllback做到這一點)

希望這有助於:)