【发布时间】:2012-07-10 16:20:31
【问题描述】:
当客户端收到UpdatePanel 的响应并将其呈现在页面上时,究竟会发生什么?
提出这个问题的动机是为this question 和this jQueryUI ticket 中提出的问题找到合适的解决方案。本质上,当 jQueryUI 日期选择器附加到 UpdatePanel 中的 TextBox 并在 UpdatePanel 更新时打开时,会发生奇怪的事情。
This question 和its linked article 暗示无非就是这样:
document.getElementById('updatePanelContainer').innerHTML = responseHtml;
但我已经在this jsfiddle 中尝试过,日期选择器完全停止工作,除了完成按钮;我在部分回发中看到的行为是 datepicker 仍然有效,但它的状态是从它下面取出的。当我使用 jQueryUI 非缩小代码对其进行调试时,我看到 drawYear 和 drawMonth 属性丢失了它们的值(变为 0)。
在使用 Firebug 并观察部分回发发生时,我注意到页面中有以下变化:
- Firebug 的 DOM 选项卡中的某些输入属性会消失,例如:
- 访问密钥标签
- 父元素
- 客户端高度
- clientLeft
- clientTop
- 客户端宽度
- 表格
- 下一个兄弟
- 偏移高度
- 左偏移
- offsetParent
- 偏移顶部
- 偏移宽度
- 父节点
- previousElementSibling
- 上一页兄弟
- 滚动高度
- 滚动宽度
- 一堆隐藏的
span元素被添加到页面底部,其中包含带有 ASP.NET 信息的隐藏字段(似乎类似于 __VIEWSTATE) -
update元素的内容会发生细微的变化(可能是空格和制表符)
更新:我设法让重现工作;他们的关键是在重新创建绑定的输入后重新初始化日期选择器。见上面提到的jsfiddle的latest revision。不过,我仍然想知道部分回发是否有什么特别之处。
【问题讨论】:
-
这可能不是您要寻找的答案...但不要使用
UpdatePanel。它试图简化 ajax,但复杂得多。 -
我不同意 @jrummell...UpdatePanels 可能不是 100% AJAX 替代品,但当情况需要它们时,它们是一个很好的工具。
标签: asp.net jquery-ui updatepanel partial-postback