【问题标题】:What happens in the page update of an ASP.NET partial postback?ASP.NET 部分回发的页面更新会发生什么?
【发布时间】:2012-07-10 16:20:31
【问题描述】:

当客户端收到UpdatePanel 的响应并将其呈现在页面上时,究竟会发生什么?

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

This questionits linked article 暗示无非就是这样:

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

但我已经在this jsfiddle 中尝试过,日期选择器完全停止工作,除了完成按钮;我在部分回发中看到的行为是 datepicker 仍然有效,但它的状态是从它下面取出的。当我使用 jQueryUI 非缩小代码对其进行调试时,我看到 drawYeardrawMonth 属性丢失了它们的值(变为 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


【解决方案1】:

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

【讨论】:

  • 所以你说的是部分回发的客户端操作无非是从服务器接收一堆HTML并将UpdatePanelinnerHtml属性设置为那个新的 HTML?
  • 正确。如果你使用 tamperdata/firebug/fiddler 很容易看到。响应只是一个以竖线分隔的字符串,表示响应、要更新的更新面板以及用于更新面板的原始 HTML。
猜你喜欢
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-18
  • 1970-01-01
  • 2016-11-02
相关资源
最近更新 更多