AJAX 客户端生命周期事件

    支持 AJAX 的 ASP.NET 页不仅引发与 ASP.NET 2.0 网页一样的服务器生命周期事件,还引发客户端生命周期事件。这些客户端事件可让您自定义回发和异步回发(部分页更新)的用户界面,还可帮助您在浏览器中页的生存期内,管理自定义脚本组件。
这些客户端事件由 Microsoft AJAX Library 中的类引发。当页包含 ASP.NET AJAX 服务器控件时,这些类将自动实例化。客户端类提供了一些 API,使您能够绑定到
    事件并提供这些事件的处理程序。由于 Microsoft AJAX Library 是独立于浏览器的,因此,为处理程序编写的代码在所有支持的浏览器中的工作方式相同。
    初始请求(GET 请求)和同步回发的关键事件是 Application 实例的 load 事件。当 load 事件处理程序中的脚本运行时,所有脚本和组件都已加载并可用。当启用 UpdatePanel 控件的部分页呈现时,关键客户端事件是 PageRequestManager 类的事件。这些事件为您提供了处理许多常见情况的能力,其中包括取消回发的能力、赋予一个回发优于另一个回发的优先级的能力以及在刷新 UpdatePanel 控件的内容时对这些控件进行动画处理的能力。无论您是在创建页还是在编写组件,客户端事件都很有用。如果您是一名网页开发人员,则可以提供一个在浏览器中加载和卸载页时将调用的自定义脚本。

客户端类

    Application 和 PageRequestManager 类。
    当页包含 ScriptManager 控件时,将在浏览器中实例化 Application 类。
    如果页包含一个 ScriptManager 控件和一个或多个 UpdatePanel 控件,则该页可执行部分页更新(如果浏览器支持并已启用部分页呈现)。在此情况下,浏览器中将
    自动获得 PageRequestManager 类的实例。PageRequestManager 类将引发特定于异步回发的客户端事件。

添加客户端事件的处理程序

    若要添加或移除由 Application 和 PageRequestManager 类引发的事件的处理程序,请使用这些类的 add_事件名 和 remove_事件名 方法。下面的示例演示如何将名为 MyLoad 的处理程序添加到 Application 对象的 init 事件。
    此外Microsoft AJAX Library 还包含用于为 DOM 元素事件添加、清除和移除处理程序的类。这些类包括:
        *Sys.UI.DomEvent.addHandler 方法或快捷方式 $addHandler。
        *Sys.UI.DomEvent.clearHandlers 方法或快捷方式 $clearHandlers。
        *Sys.UI.DomEvent.removeHandler 方法或快捷方式 $removeHandler。

Application 和 PageRequestManager 类的客户端事件


下面列出了 Application 和 PageRequestManager 类的客户端事件,可以在支持 AJAX ASP.NET 的页中处理这些事件。


常见情况的事件顺序

初始请求
在页的初始请求过程中,将引发有限数量的客户端事件。假定初始请求的以下情况:
    *页包含 ScriptManager 控件,且该控件的 SupportsPartialRendering 和 EnablePartialRendering 属性均为 true。
    *该请求为 GET 请求。
    *成功返回来自服务器的响应。

以下客户端事件按此顺序发生:
   1.将初始请求发送到服务器。
   2.客户端接收响应。
   3.Application 实例引发 init 事件。
   4.Application 实例引发 load 事件。

在浏览器中的页的生存期内,Application 实例的 init 事件仅引发一次。对于后续异步回发,不再引发此事件。在初始请求期间,不引发任何 PageRequestManager 事件。

异步回发
异步回发可将一些页数据发送到服务器、接收响应并更新页的一部分。假定异步回发的以下情况:
    *页包含 ScriptManager 控件,且该控件的 SupportsPartialRendering 和 EnablePartialRendering 属性均为 true。
    *页包含 UpdatePanel 控件,且该控件的 ChildrenAsTriggers 属性为 true。
    *UpdatePanel 控件内的按钮启动异步回发。
    *成功返回来自服务器的响应。

以下客户端事件按此顺序发生:
   1.单击 UpdatePanel 内的按钮,这将启动异步回发。
   2.PageRequestManager 实例引发 initializeRequest 事件。
   3.PageRequestManager 实例引发 beginRequest 事件。
   4.将请求发送到服务器。
   5.客户端接收响应。
   6.PageRequestManager 实例引发 pageLoading 事件。
   7.PageRequestManager 实例引发 pageLoaded 事件。
   8.Application 实例引发 load 事件。
   9.PageRequestManager 实例引发 endRequest 事件。

请注意,Application 实例的 load 事件将在 PageRequestManager pageLoaded 事件之后而在其 endRequest 事件之前引发。

多个异步回发
当在服务器上或浏览器中完成对上一个已启动的请求的处理之前,如果用户启动新的请求,则会引发多个异步回发。假定多个异步回发的以下情况:
    *页包含 ScriptManager 控件,且该控件的 SupportsPartialRendering 和 EnablePartialRendering 属性均为 true。
    *页包含 UpdatePanel 控件。
    *单击 UpdatePanel 控件内用于启动异步回发的按钮两次。当服务器正在处理由第一次单击启动的请求时,发生第二次单击。
    *从服务器成功返回对第一个请求的响应。

以下客户端事件按此顺序发生:
   1.单击 UpdatePanel 内的按钮,这将启动异步回发。
   2.PageRequestManager 实例引发 initializeRequest 事件。
   3.PageRequestManager 实例引发 beginRequest 事件。
   4.将请求发送到服务器。
   5.再次单击该按钮,这将启动第二次异步回发。
   6.PageRequestManager 实例为第二次按钮单击引发 initializeRequest 事件。
   7.PageRequestManager 实例为第一次按钮单击引发 endRequest 事件。
   8.PageRequestManager 实例为第二次按钮单击引发 beginRequest 事件。
   9.将第二次单击启动的请求发送到服务器。
  10.为第二次单击接收响应。
  11.PageRequestManager 实例引发 pageLoading 事件。
  12.PageRequestManager 实例引发 pageLoaded 事件。
  13.Application 实例引发 load 事件。
  14.PageRequestManager 实例引发 endRequest 事件。

异步回发的默认行为是最新的异步回发优先。如果有两个异步回发接连发生,且第一个回发仍在浏览器中进行处理,则取消第一个回发。如果已向服务器发送第一个回发,则当该回发到达服务器时,服务器将处理第二个请求,而不会返回第一个请求。

离开页
当用户离开某个页时,将从浏览器中卸载当前页,您可以处理 unload 事件以释放资源。假定离开页的以下情况:
    *页包含 ScriptManager 控件,且该控件的 SupportsPartialRendering 和 EnablePartialRendering 属性均为 true。
    *目标页存在。

以下客户端事件按此顺序引发:
   1.启动对新页的请求。
   2.浏览器接收对新页的响应。
   3.Application 实例引发 unload 事件。
   4.将显示新页。

如果新页的请求中存在错误,则仍将引发 unload 事件,但不显示新页。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值