在工作中见到一下代码:
bool isFile = File.Exists(filePath);
StringBuilder sb = new StringBuilder();
sb.Append(" setTimeout(function() {");
if (!isFile) { sb.Append("wisdom.alert('相应的报表文件不存在!');"); }
sb.Append("}, 50);");
ScriptManager.RegisterStartupScript(this.Page, this.Page.GetType(), "", "Sys.Application.add_init
(function() {" + sb.ToString() + "});", true);
这段逻辑主要处理如果取不到文件就报提示信息报表文件不存在的信息;
这行代码,没看太明白。就上网查一下,于是得到总结出一下内容:
在 ASP.NET AJAX 网页的客户端生命周期内,引发事件的两个主要的 Microsoft AJAX Library 类分别是 Application 和
PageRequestManager 类。
当页包含 ScriptManager 控件时,将在浏览器中实例化 Application 类。虽然 Application 类与 Page 服务器控件(派生自 Control
类)类似,但它提供了用于引发服务器事件的附加功能。同样,Application 类派生自 Sys.Component 类,但它会引发您可处理的客户
端生命周期事件。
如果页包含一个 ScriptManager 控件和一个或多个 UpdatePanel 控件,则该页可执行部分页更新(如果浏览器支持并已启用部分页呈
现)。在此情况下,浏览器中将自动获得 PageRequestManager 类的实例。PageRequestManager 类将引发特定于异步回发的客户端事件
。有关部分页呈现的详细信息,请参见部分页呈现概述。
添加客户端事件的处理程序
若要添加或移除由 Application 和 PageRequestManager 类引发的事件的处理程序,请使用这些类的 add_事件名 和 remove_事件名
方法。下面的示例演示如何将名为
MyLoad
的处理程序添加到 Application 对象的 init 事件。
Visual Basic 复制代码 Sys.Application.add_init(MyInit);
function MyInit(sender) {
}
Sys.Appplication.remove_init(MyInit);
下面列出了 Application 和 PageRequestManager 类的客户端事件,可以在支持 AJAX ASP.NET 的页中处理这些事件。本主题的后面部
分将描述引发事件的顺序。
事件
说明
Sys.Application.init 事件
在已加载所有脚本之后并在创建任何对象之前引发。如果正在编写一个组件,则 init 事件为您在页生命周期中将您的组件添加到页中
提供了一个机会。这样,其他组件或脚本以后就可以在页生命周期中使用所添加的组件了。如果您是一名网页开发人员,则在大多数情
况下,应使用 load 事件而不是 init 事件。
当首次呈现页时,仅引发一次 init 事件。后续的部分页更新不会引发 init 事件。
Sys.Application.load 事件
在已加载所有脚本且应用程序中使用 $create 创建的所有对象已初始化之后引发。对于所有针对服务器的回发(包括异步回发)引发
load 事件。
如果您是一名网页开发人员,则可以创建一个名为
pageLoad
的函数以自动提供 load 事件的处理程序。在已由 add_load 方法添加到 load 事件的任何处理程序之后,调用
pageLoad
处理程序。
load 事件将采用 eventargs 参数,该参数是一个 Sys.ApplicationLoadEventArgs 对象。可以使用事件参数来确定是否因部分页更新
而刷新页以及自引发上一个 load 事件之后创建了哪些组件。
Sys.Application.unload 事件
在释放所有对象之前和浏览器窗口的 window.unload 事件发生之前引发。
如果您是一名网页开发人员,则可以创建一个名为
pageUnload
的函数以自动提供 unload 事件的处理程序。
pageUnload
事件刚好在从浏览器中卸载页之前进行调用。在此事件过程中,应释放代码所占有的任何资源。
Sys.Component.propertyChanged 事件
在组件的属性发生更改时可能引发。仅当组件开发人员在属性 Set 访问器中调用 Sys.Component.raisePropertyChange 方法时引发此
事件。有关更多信息,请参见定义自定义组件属性和引发 PropertyChanged 事件。
propertyChanged 事件将采用 eventargs 参数,该参数是一个 Sys.applicationLoadEventArgs 对象。
Sys.Component.disposing 事件
释放 Application 实例时引发。
Sys.WebForms.PageRequestManager initializeRequest 事件
在异步请求开始之前引发。可以使用此事件来取消回发,如为另一个异步回发赋予优先权。
initializeRequest 事件将采用 eventargs 参数,该参数是一个 Sys.WebForms.InitializeRequestEventArgs 对象。此对象可提供导
致回发的元素和基础请求对象。InitializeRequestEventArgs 还公开 cancel 属性。如果将 cancel 设置为 true,则会取消新的回发
。
Sys.WebForms.PageRequestManager beginRequest 事件
在启动一个异步回发并将其发送到服务器之前引发。如果有一个回发已在处理,则将停止该回发(通过使用 abortPostBack 方法)。
可以使用此事件来设置请求标头,或开始页上的动画以指示正在对请求进行处理。
beginRequest 事件将采用 eventargs 参数,该参数是一个 Sys.WebForms.BeginRequestEventArgs 对象。此对象可提供导致回发的元
素和基础请求对象。
Sys.WebForms.PageRequestManager pageLoading 事件
在从服务器收到对异步回发的响应之后但在页上的任何内容更新之前引发。可以使用此事件为更新的内容提供自定义转换效果。
pageLoading 事件将采用 eventargs 参数,该参数是一个 Sys.WebForms.PageLoadingEventArgs 对象。此对象可提供一些与因最新的
异步回发而要删除和更新的面板有关的信息。
Sys.WebForms.PageRequestManager pageLoaded 事件
在因同步回发或异步回发而刷新页上的所有内容之后引发。对于同步回发,仅可以创建面板;而对于异步回发,则可以创建和更新面板
。可以使用此事件管理针对更新内容的自定义转换效果。
pageLoaded 事件将采用 eventargs 参数,该参数是一个 Sys.WebForms.PageLoadedEventArgs 对象。此对象可提供一些与在最新的回
发中更新和创建的面板有关的信息。
Sys.WebForms.PageRequestManager endRequest 事件
在处理异步回发的响应并更新页之后或在响应的处理过程中(如果存在错误)引发。如果出错,则不更新页。使用此事件可为用户提供
自定义的错误通知或记录错误。
endRequest 事件将采用 eventargs 参数,该参数是一个 Sys.WebForms.EndRequestEventArgs 对象。此对象可提供一些与发生的错误
以及是否已处理错误有关的信息,还可提供响应对象。