ASP.NET AJAX UpdatePanel控件

不论好坏,UpdatePanel控件都是 ASP.NET AJAX 社区所喜爱的。我说“好”,是因为 UpdatePanel 使部分页面呈现变得相当简单,而说“坏”,是因为它的简便和易用性是以效率和令人啼笑皆非的带宽为代价的。

UpdatePanel 可以为一般的网页带来 AJAX 神奇的好处,但是它不能提供我们与 AJAX 正常关联的高效性。例如,您是否知道,当 UpdatePanel控件对服务器执行异步 AJAX 回调以更新其内容时,这个请求包含了常规 ASP.NET 回发所包含的一切,其中还包括视图状态呢?大多数开发人员会以为 AJAX 取消了视图状态。而 UpdatePanel 的 AJAX 品牌却并非如此。

如果您准备使用 UpdatePanel控件,您需要清楚您在准备干什么。在许多情况下,从性能的角度而言,应用程序最好是不使用 UpdatePanel,而是使用对 WebMethods 或页面方法的异步调用。这样做可能会大幅度降低网络传输中的数据量。但是,它也是一个根本转变,在这里 UI 更新需要由开发人员使用该页面上的 JavaScript 来进行显式处理。

此外,ASP.NET AJAX 论坛上到处都有关于自定义 UpdatePanel 的提问。其实,只要您了解为 UpdatePanel 提供客户端支持的 Microsoft? AJAX Library 中的 PageRequestManager、JavaScript 类,这里面许多问题就可以迎刃而解。

既然已经提供了 ASP.NET AJAX,我想进一步检查一下 UpdatePanel,从而进一步了解您可以如何对其进行自定义和优化,甚至在没有它的情况下如何运行。这恰恰也是本期专栏包含的全部内容。

更新突出显示

有时候您无法帮助 Microsoft 的开发人员,而只能对他们表示遗憾。如果他们不能将工作做得足够好,就会遭到公众的抨击。然而,有时候他们的工作做得很出色,也会遭到抨击。例如,我最近收到了一位客户的电子邮件,抱怨 ASP.NET AJAX UpdatePanel 运行得有点过头了。

UpdatePanel 使 ASP.NET 页面回发到服务器,并将它变为流畅、无闪烁的更新时出现闪光和闪烁变得极其简单。UpdatePanel 可以通过将回发转换成异步回调(XML-HTTP 请求),以及使用客户端上的 JavaScript 以刷新由 UpdatePanel控件封装的页面的一部分来发挥它的魔力。闪光和闪烁会消失,因为浏览器不会将该页面重新绘制成与它在回发期间的一样。

客户的抱怨是,用户有时候不会注意到页面的那个部分已经更新了新内容。他的问题很简单:ASP.NET AJAX 团队的工作人员是否能使

updatePanel 闪烁再多一点,以便用户不会错过重要的更新?

不幸的是,ASP.NET AJAX 团队可能对制造 UpdatePanel 闪烁没什么兴趣。毕竟,消除闪烁才是发明 UpdatePanel 的初衷。但值得高兴的是,您可以在浏览器中使用 AJAX 的一些神奇功能,以吸引对已更新的 UpdatePanel 的注意。秘诀在于 Microsoft AJAX Library(由客户端一半的 ASP.NET AJAX 组成的 JavaScript 类的库)中的 Sys.WebForms.PageRequestManager 类。PageRequestManager 可以管理由 UpdatePanel 启动的异步回调。它还负责在异步回调完成后更新 UpdatePanel 内的内容。

PageRequestManager 可以在更新前和更新后激发浏览器中的事件。您可以将 JavaScript 中的这些事件关联起来,并运行可以提醒用户注意更新内容的代码。关键事件被命名为 pageLoaded.此事件每次都会激发浏览器中的页面加载(它类似 Page_Load in ASP.NET)。它每次还会激发代表 UpdatePanel控件完成而启动的异步回调,并且会更新这个 UpdatePanel 中的内容。您可以使用两行代码(可以合并为一行)注册 pageLoaded 事件的 JavaScript 处理程序:

var prm = Sys.WebForms.PageRequestManager.getInstance();prm.add_pageLoaded(pageLoaded);

相关推荐