ASP.NET AJAX 客户端生命周期事件
Introduction【介绍】
微软Ajax提出了与ASP.NET 2.0页面服务器端生命周期事件相似的客户端生命周期事件。这些客户端事件使得我们能为传统回送和异步回送(部分页面刷新)都能定制自己的用户界面。它们还可以在整个页面生命周期期间帮助你管理和使用自定义的脚本。
这些客户端事件在微软的AJAX Libray的类中都被提出来了(我们可以在AJAX Libray的类中找到它们)。当加载一个带有AJAX服务器控件时,这些类都会自动地实例化(instantiated?)。这些类提供了一些APIs以便我们能够将事件绑定到事件提供处理程序。并且AJAX Library是独立于浏览器的,所以你写的代码可以工作在所有支持的浏览器。
关键的事件是初始化请求和异步回送的应用程序实例的 load 事件。当脚本在加载处理事件运行时,所有的脚本和组件都已经被加载并且是可用的。当使用了 UpdatePanel 控件部分页面刷新时,所有客户端事件中最关键的就是 PageRequestManager 类。这些客户端事件使得你能够实现某些场景。比如包括了: 撤销回送,为一个回送设置更高的优先级,还可以使 UpdatePanel 在刷新的时候交互得更好。
这些事件对于我们创建页面或写组件都有很大的帮助。如果你是一个网页开发人员,你可以为页面在加载和卸载时使用定制的脚本。
向了解更多服务器端生命周期事件,可以参考 ASP.NET Page Life Cycle Overview.
Client Classes【客户端类】
在微软AJAX类库中提出了在AJAX网页的客户端生命周期中两个很主要的类: Application 类和 PageRequestManager 类。
当浏览器请求一个有包含有 ScriptManager 控件的页面时,Application 类就实例化了。Application 类和服务器端的 Page 控件类似,也是继承自 Control 类,不过却额外附加了一些功能(相比服务端事件)。类似的, Application 继承了 Sys.COmponent 类,除此,还提供了很多在客户端生命周期期间内的可操作事件。
如果一个页面包含了一个 ScriptManager,并且还存在了一个或更多的 UpdatePanel 控件,那么这个页面就可以实现部分更新的效果了。如果是那样的话,一个 PageRequestManager 类的实例对浏览器是可用的了。PageRequestManager 提供的客户端事件都是关于异步回送的。更多关于生成部分页面的细节请参考:Partial-Page Rendering Overview.
Adding Handlers for Client Events【为客户端事件增加Handler】
现在通过使用 Application 和 PageRequestManager 类中的 add_eventname 和 reomve_eventname 方法来添加或移除事件。下面这个例子展示了如何添加一个操作(handler)名为 MyLoad 到 Application 对象的 init 事件。
Sys.Application.add_init(MyInit);
function MyInit(sender) {
}
Sys.Appplication.remove_init(MyInit);
注释;这个例子只是展示了使用 add_eventname 和 remove_eventname 方法的语法。更多关于使用这个事件的细节将在后面的主题提供。
Handling the Application Load and Unload Events【操作Application的加载和卸载事件】
要操作 Application 对象的 load 和 unload 事件,不需要显示地绑定到一个操作事件。相反地,你可以直接使用保留关键字 pageLoad 和 pageUnload 来创建一个函数。下面这个例子展示了如何为 Application 的 load 事件添加一个操作。
function pageLoad(sender, args) {
}
Events for Other Client Classes【其它客户端类】
这个主题仅仅描述由 Application 和 PageRequestManager 类提供的事件。微软的AJAX类库还包括了以下的类用于 DOM 元素事件的添加、清除和移除。这些类包括了:
有 Sys.UI.DomEvent.addHandler 方法或简短写法 $addHandler.
有 Sys.UI.DomEvent.clearHandlers 方法或简短写法 $clearHandlers.
有 Sys.UI.DomEvent.removeHandler 方法或简短写法 $removeHandler.
有关 DOM 原理提供的事件不是本主题讨论的。
Client Events of the Application and PageRequestManager Classes【Application和PageRequestManager类的客户端事件】
下面的表格列出了你可以在 AJAX 的 ASP.NET 页面使用的 Application 和 PageRequestManager 类的客户端事件。事件发生的顺序将在稍后的主题中进行讨论。
Event
(事件名称)
Description
(描述)
init Event
[初始化事件]
在所有脚本被加载后,在任何一个对象被创建之前引发该事件。如果你打算写一个组件(脚本),init 事件提供了一个在生命周期内添加组件(脚本)到页面的点。该组件可以被其它在生命周期内的脚本调用。如果你是一个网页开发人员,在大多数的情况之下,建议用 load 事件来替代 init 事件来处理。
init 事件只在页面开始生成时创建一次。后来的部分页面刷新将不会引发 init 事件。
load Event
[加载事件]
该事件在所有脚本被加载后,并且由使用 $create 初始化的所有程序对象被创建后引发。该事件将被所有回送到服务器引发,这些回送也包括异步的回送。
如果你是网页开发人员,你可以创建一个名为 pageLoad 的函数,该函数是由加载事件本身提供的。该 pageLoad 操作(handler)是在任何一个通过 add_load 方法被添加到 load 事件的操作后可以调用。
load 事件需要一个 Sys.ApplicationLoadEventArgs 对象作为 eventargs 参数。你可以通过该参数来决定页面是否需要显示部分刷新,还可以决定哪些组件应当在上一个引发 load 事件后被创建。