2012-05-15 99 views
0

我有一個轉發器形成一個Html表。預覽是這樣的:更新面板,更新方法不會更新控件

| No | Name | Status | 
-------------------------------- 
| 1. | Process A | In Progress | 
| 2. | Process B | In Progress | 
| 3. | Process C | In Progress | 
| 4. | Process D | In Progress | 
... 
| n. | Process N | In Progress | 
-------------------------------- 

我把中繼器放在更新面板中。

當我點擊一個按鈕時,表單會調用這樣一個發送處理函數。 該函數將爲每一行循環並將狀態文本從「正在處理」設置爲「已發送」。 假設過程大約2秒 我想在狀態文本被分配後通過UpdatePanel.Update()更新Repeater中的狀態文本,但是我的問題是Status不會更新。 功能完成後更新。

發送函數是這樣的:

protected void btnSend_Clicked(object sender, EventArgs e) 
    { 
     foreach (RepeaterItem item in rptData.Items) 
     { 
      UpdatePanel upnlStatus = (UpdatePanel)item.FindControl("upnlStatus"); 
      Literal litStatus = (Literal)item.FindControl("litStatus"); 
      System.Threading.Thread.Sleep(2000); 
      litStatusText = "Sent"; 
      upnlStatus.Update();     
     } 
    } 

我的問題是什麼是做這個事情的最好方法是什麼? 更新面板是否支持這種實時更新?提前致謝。

回答

0

一個更新面板的AsyncPostback的模式是

  1. 客戶做出請求
  2. 服務器做一個任務
  3. 客戶端更新

因此,它等待的是2完成在執行之前3.您無法觸發客戶端執行服務器上任務的更新,因爲服務器進程在每個AsyncPostback之間的服務器上不存在。整個頁面從每個AsyncPostback之間的視圖狀態重新創建。

要做你想做的事情,你需要異步啓動任務並在稍後檢索結果。執行此操作的常用方法是使用Web Service。另請檢查this

+0

謝謝@ DavRob60 :) 但沒有WebService可以做到這一點嗎?我聽說過C#中的異步方法。我可以通過C#異步服務器方法執行此部分呈現嗎?謝謝 –

+0

@WillyLazuardi這是一個巨大的簡化,但「異步服務器方法」是Web服務的一部分。詳細解釋需要很長時間。 – DavRob60