ASP.NET部分回发的页面更新会发生什么?

时间:2012-07-10 16:20:32

标签: asp.net jquery-ui updatepanel partial-postback

当客户收到UpdatePanel的回复并在页面上呈现时,究竟会发生什么?

这个问题的动机是为this questionthis jQueryUI ticket中提出的问题找到合适的解决方案。基本上,当jQueryUI日期选择器附加到TextBox中的UpdatePanel时会发生奇怪的事情,并且当UpdatePanel更新时会打开。

This questionits linked article表明它只不过是:

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

但是我已经在this jsfiddle尝试过了,而且除了Done按钮之外,datepicker完全停止了工作;我在部分回发中看到的行为是,datepicker仍然有效,但是它的状态是从它下面取出来的。当我使用jQueryUI非缩小代码调试它时,我发现drawYeardrawMonth属性会丢失它们的值(变为0)。

在玩Firebug并观看部分回发时,我注意到页面中有以下更改:

  • Firebug的DOM选项卡中的某些输入属性消失了,例如:
    • accessKeyLabel
    • parentElement
    • clientHeight
    • clientLeft
    • clientTop
    • clientWidth
    • 形式
    • nextSibling
    • 的offsetHeight
    • offsetLeft
    • offsetParent
    • 的offsetTop
    • offsetWidth
    • parentNode
    • previousElementSibling
    • previousSibling
    • scrollHeight属性
    • scrollWidth
  • 一堆隐藏的span元素被添加到页面底部,其中包含隐藏字段,其中包含ASP.NET信息(类似于__VIEWSTATE)
  • update元素的内容以小的方式变化(空格与标签,可能)

更新:我设法让repro工作;它们的关键是在重新创建它所绑定的输入后重新初始化datepicker。请参阅上面提到的jsfiddle的latest revision。不过,我仍然想知道,如果部分回发有什么特别的话。

1 个答案:

答案 0 :(得分:2)

部分回发只是在UpdatePanel中为div发回适当的HTML,并且该html被替换为响应。完整的回发生命周期仍然发生在服务器上,因此在更新UpdatePanel外部的控件时必须小心,因为这些更改不会反映在客户端上,但可能会产生意想不到的副作用。