典型场所下事件发生顺序解析 实际环境下,事件的触发顺序依赖于页面中使用了什么控件以及发生了什么类型的请求(初始化请求,传统回送或是异步回送)。下面,我们来归纳一下几种常见场所下事件的引发顺序。 (一)初始请求阶段引发的事件顺序 在页面的初始请求阶段,仅引发有限的几个客户端事件。假设下面就是初始化请求的情景: ◆Web页面中包含一个ScriptManager控件,且该控件的SupportsPartialRendering和EnablePartialRendering属性都置为true。 在这种情况下,将依次发生以下客户端事件: 1、初始化请求发生给服务器; 请注意,init事件仅在整个页面生命周期过程中的Application实例化时发生一次,它不会再被后来的异步回送所引发。在初始化请求(注意是请求)期间,再没有任何的PageRequestManager事件引发。 (二)异步回送阶段引发的事件顺序 在一次异步回送中,将有一些页面数据被发送到服务器,接收一个服务器端的响应,然后更新页面的相应部分。我们不妨假定存在如下的一个异步回送的场所: ◆页面中包括一个ScriptManager控件,并且该控件的SupportsPartialRendering和EnablePartialRendering属性都为true; 那么,上面情况将对应下面的客户端事件发生顺序: 1、点击UpdatePanel控件中的按钮时,引起了一个异步回送; 请注意Application的load事件发生在PageRequestManager的pageLoaded事件之后且在endRequest事件之前。 (三)存在多个异步回送时事件引发的顺序问题 当之前的一个请求正在服务器端或浏览器中运行时,用户又发送了一个新的请求时,则发生了多个异步回送。假设下面的场景描述了多个异步回送的情况。 ◆页面包括一个ScriptManager控件,并且该控件的SupportsPartialRendering和EnablePartialRendering属性都为true。 下面是客户端事件发生的顺序: 1、点击UpdatePanel中的按钮将引发一次异步回送。 【注意】默认情况下,异步回送行为一般是最近发生的那次异步回送优先级较高。如果两个异步回送按顺序发生,并且第一个异步回送仍在浏览器处理中,则第一个回送将被取消。如果第一个回送已被发送到了服务器端,则服务器在第二个请求到来并处理它之前是不会返回第一个请求的。 (四)当用户浏览焦点脱离开本页面时引发事件的情况 当用户从本页面转向访问其它页面时,当前的页面会从浏览器中卸载;因此,这时你可以通过控件unload事件来释放有关资源。我们不妨假定当用户转向访问其它页面时存在如下情况: ◆页面中包括一个ScriptManager控件,并且该控件的SupportsPartialRendering和EnablePartialRendering属性都为true。 于是,下面对应发生在客户端的事件顺序: 1、初始化一个对新页面的请求; 如果在新页面请求时发生了错误,依然会引发unload事件;只是不显示新页面罢了。 四、总结 本文中,我们使用一个具体的例子针对ASP.NETAJAX客户端生命周期中涉及的主要事件引发的顺序给出了追踪分析。但此示例显然有其特殊性且仍嫌粗略,实际开发中宜结合具体问题作针对性分析,以图从根本上掌握ASP.NETAJAX客户端生命周期中引发的主要事件先后顺序及其间的逻辑关系。
原文链接:http://hi.baidu.com/lychao2004/blog/item/64786cf2db71a417b07ec5c4.html |
ASP.NET AJAX客户端生命周期分析
ASP.NET AJAX客户端生命周期分析(实践篇)(2)