2012-07-10 71 views
1

客戶收到UpdatePanel的回覆並在頁面上呈現時會發生什麼?ASP.NET部分回發的頁面更新會發生什麼?

此問題的動機是爲this questionthis jQueryUI ticket中提出的問題尋找適當的解決方案。基本上,奇怪的事情發生在jQueryUI日期選擇器連接到TextBoxUpdatePanel,並且在UpdatePanel更新時打開。

This questionits linked article認爲它沒有什麼比這更:

document.getElementById('updatePanelContainer').innerHTML = responseHtml; 

但我已經試過在this jsfiddle和日期選擇器只是完全停止除完成按鈕工作;我在部分回傳中看到的行爲是datepicker仍然有效,但是它的狀態是從它下面取出的。當我使用jQueryUI未縮小的代碼進行調試時,我發現drawYeardrawMonth屬性會丟失它們的值(變爲0)。

在玩弄螢火蟲和看作爲一個局部回傳時,我注意到在頁面以下變化:

  • 一些在Firebug的DOM選項卡中輸入屬性的消失,如:
    • accessKeyLabel
    • parentElement
    • clientHeight
    • clientLeft
    • clientTop
    • clientWidth
    • 形式
    • nextSibling
    • 的offsetHeight
    • offsetLeft
    • offsetParent
    • 的offsetTop
    • offsetWidth
    • parentNode
    • p reviousElementSibling
    • previousSibling
    • scrollHeight屬性
    • scrollWidth
  • 隱藏span元素的一堆被添加到包含隱藏字段與他們ASP.NET信息頁面的底部(似乎類似於__ViewState)
  • 的小方法update元素的內容發生更改(空格VS標籤,也許)

UPDATE:我設法讓repro工作;他們的關鍵是重新初始化日期選擇器,重新創建它綁定的輸入。請參閱上述jsfiddle的latest revision。不過,我仍然想知道,如果部分回發有什麼特別之處的話。

+0

這可能不是你正在尋找的答案......但是不要使用'UpdatePanel'。它試圖簡化Ajax,但複雜得多。 – jrummell 2012-07-10 16:34:19

+0

我不同意@jrummell ... UpdatePanels可能不是100%的AJAX替代品,但它們是情況需要的很好的工具。 – 2012-07-10 16:40:35

回答

1

部分回傳只是在UpdatePanel中發回適當的HTML給div,並且該html被替換爲響應。完整的回發生命週期仍然發生在服務器上,所以在更新UpdatePanel之外的控件時必須小心,因爲這些更改不會反映在客戶端上,但可能會產生意想不到的副作用。

+0

所以你說的是部分回發的客戶端操作只不過是從服務器接收一堆HTML並將UpdatePanel的'innerHtml'屬性設置爲新的HTML? – 2012-07-16 15:29:56

+0

正確。如果你使用tamperdata/firebug/fiddler,很容易看到。響應只是一個表示響應的管道分隔字符串,要更新的更新面板以及用於更新面板的原始HTML。 – 2012-07-16 16:41:38