2011-06-20 28 views
1

我正在處理一個龐大複雜的ASP.NET項目。JavaScript觸發的UpdatePanel沒有正確更新

我有一個動態加載的Web用戶控件,UpdatePanel不能正確更新。 UpdatePanel從JavaScript函數中被觸發。

我設法創建了一個非常簡化的項目,演示了這個問題,並將其發佈在http://www.softcircuits.com/Client/TestProject.zip

如果對這些技術有更深入的理解的人可以看一看並指向正確的方向,我將非常感激。

+0

我有一個類似的問題,其中HiddenField尚未由Request.Form填充動態控件的OnLoad(在OnInit期間添加)。當然,我正在做一個完整的後衛,而不是一個部分。等到PreRender讀取HiddenField的工作,但不令人滿意。 – 2013-05-24 19:51:32

回答

1

我想我找到了正在發生的事情。我知道UpdatePanel回發就像一個普通的回發,但只有一部分頁面被髮送回客戶端。所以我玩了一下,發現HalfTrackMindMan提到的按預期工作。然後我詢問谷歌關於UpdatePanels的常見錯誤,並發現this article解釋發生了什麼問題。

這就是實際發生的情況。

  1. __doPostBack發佈頁面的值到服務器後的參數都文本框的值是空白
  2. 在Load事件觸發的服務器
  3. 並更改文本框
  4. 事件處理器執行和張貼值在2個文本框(它們都復位到空白
  5. ...
  6. 更新面板呈現與空白值
  7. 設置

因此,如果您將測試放在其中一個文本框中並按下按鈕,您可以看到「測試」值送到服務器並返回。

1|#||4|356|updatePanel|MainContent_WebUserControl11_ctl00_UpdatePanel1| 
     <p> 
      Message:<br /> 
      <input name="ctl00$MainContent$WebUserControl11$ctl00$TextBox1" type="text" value="testing" id="MainContent_WebUserControl11_ctl00_TextBox1" /> 
     </p> 

因此,要更新更新面板中的input元素的值,您需要在Pre_render事件中執行此操作。另一方面,你可以更新on_load上的標籤,它會起作用。

希望有所幫助。

+0

謝謝@marto。我實際上碰到了你鏈接的文章。我會更仔細地再讀一遍。我在Pre_Render中做了一些工作,但我仍然對某些細節模糊不清。 –

1

嘗試在UpdatePanel的OnPreRender事件中設置文本框值,而不是OnLoad。

+0

是的,這似乎工作,謝謝。儘管在繼續之前我會試着更好地理解這個問題。它看起來與動態加載控件的時間有關。 –