2010-07-27 56 views
1

我認爲這對你來說是一個簡單的問題。在這裏,我們去:ASP C#更新內容

在我的.aspx頁面中,我有一個標籤Label1的和一個按鈕Button1的通過更新面板所包圍。

上的按鈕即可調用代碼隱藏方法如下所示:

protected void Click(object sender, EventArgs e) { 
    ThreadProc("Hello"); 
    Thread.Sleep(2000); 
    ThreadProc("Hello2"); 
    Thread.Sleep(2000); 
    ThreadProc("Hello3"); 
} 
void ThreadProc(string info) { 
    Label1.Text = info; 
    // UpdatePanel1.Update(); 
} 

我想看到的是,該標籤是根據代碼的功能更新和顯示(呈現) 。所以應該你好Hello2 2秒,最後Hello3應顯示。 看來只有最後的Hello3被渲染。有人能解釋爲什麼會發生這種情況,以及我如何實現我的想法?

的總體任務,我試圖做到的是在按鈕上點擊調用查詢不同的網頁多線程功能。每當一個工作線程從他的任務中返回時,它應該用新添加的記錄更新一個gridview。在這裏,問題是一樣的:只有在所有線程完成他們的工作之後,webpart纔會更新。

非常感謝您的幫助!

乾杯 克里斯托夫

回答

6

因爲代碼的Web服務器上運行,它渲染的最後一頁,並將其發送到客戶端的Web瀏覽器之前處理整個方法Click()。因此,您只能看到最終結果,其中「Hello3」爲Label1.Text

那Thread.sleep代碼(2000)對你的代碼的作用是從Web服務器的HTTP響應需要4.x版秒而不是隻有一秒鐘的一小部分,如果你離開它了。

但是,如果你想看到的每個更新到Label1.Text,你可以做到這一點與異步AJAX調用。

+0

其中一個upvotes給了我1000分! :) – JohnB 2010-07-27 18:27:30

+0

非常感謝您的澄清。 順便說一下,我使用essentialObjects ProgressBar + JavaScript實現了我的任務。謝謝 – chr1s 2010-07-28 06:54:48

0

其實這段代碼的功能如下:

  • 的頁面被請求
  • 在服務器中,標籤被更新幾次
  • 的頁面是配上標籤的最後一個值。

客戶端只得到最後的值,因爲這段代碼的輸出僅僅是靜態的HTML

什麼你盡力去完成,必須在客戶端編碼。你可以使用JavaScript來完成這種事情。