前边我们针对以XMLHttpRequest为核心学习了AJAX的相关知识,接下来,重点学习一下微软在ASP.NET中的AJAX的框架的基础学习,主要是AJAX Extension中的几个控件,如下图:

而,这篇博客,我们来重点看一下ScriptManager的学习。而我主要是通过他的属性来进行学习的。
一,概述:ScriptManager控件包括在ASP.NET2.0以上版本的AJAXExtensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问WebService。所有需要支持ASP.Net AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。
如下():
- <span style="font-size:18px;"><asp:ScriptManager ID="ScriptManager1" runat="server">
- </asp:ScriptManager>
- </span>
简单理解就是每一个需要异步更新的页面,最开始都需要添加这个控件,保证异步更新的顺利完成。
二,下边看一下它的几个常用属性:
属性或方法 | 说明 |
AllowCustomErrorsRedirect | 该属性为布尔类型,默认值为true,表示在异步更新发生异常时是否使用Web.config中<customErrors>节中的设定。Web.config的<customErrors>节中可以指定应用程序级别的错误处理页面,这将通过重定向至某个专门显示异常的页面来实现 |
AsyncPostBackErrorMessage | 该属性表示了异步回送过程中发生的异常将显示出的消息,我们可在ScriptManager的声明中设置这个属性 |
AsyncPostBackTimeout | 异步回传时超时限制,默认值为90,单位为秒 |
AsyncPostBackError | 异步回传发生异常时的服务端处理函数,在这里可以捕获信息并作相应的处理。 |
EnablePartialRendering | 该属性可以使页面的某些控件或某个区域实现Ajax类型的异步回送和局部更新功能。若需要启用页面的局部更新模式,则应该将EnablePartialRendering属性设置为true,保持默认值即可 |
ScriptPath | 设置所有的脚本块的根目录,作为全局属性,包括自定义的脚本块或者引用第三方的脚本块。如果在Scripts中的<asp:ScriptReference/>标签中设置了Path属性,它将覆盖该属性 |
ResolveScriptReference | 指定ResolveScriptReference事件的服务器端处理函数,在该函数中可以修改某一条脚本的相关信息如路径、版本等。 |
ScriptMode | 指定ScriptManager发送到客户端的脚本的模式,有四种模式:Auto,Inherit,Debug,Release,默认值为Auto。具体如下表所示 |
ScriptMode的属性值
属性值 | 说明 |
Auto | 该属性值用于根据web.config配置中的retail配置节的值来决定脚本的模式。如果retail配置节的值为true,则把发布模式的脚本发送到客户端,反之则发送调试脚本 |
Debug | 该属性值用于当retail配置节的值不为true时,则发送debug版本的客户端脚本 |
Release | 该属性值用于当retail配置节的值不为false时,则发送Release版本的客户端脚本 |
Inherit | 该属性值意义同Auto相同 |
认真阅读上边的属性和方法,通过实践来了解,就非常容易了,这里我来写其中几个例子。
1,AllowCustomErrorsRedirect属性,当它设为true时就是利用我们web.config的<customErrors>指向的错误页面,如果程序出现了错误,则直接跳转到指定的错误页面。我们来前代码:
前台代码:
- <span style="font-size:18px;"> <form id="form1" runat="server">
- <%--错误页配置--%>
- <%--指定AllowCustomErrorsRedirect的属性为true --%>
- <asp:ScriptManager ID="ScriptManager1" runat="server" AllowCustomErrorsRedirect="true">
- </asp:ScriptManager>
-
- <asp:UpdatePanel ID="UpdatePanel1" runat="server">
- <ContentTemplate>
- <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
- </ContentTemplate>
- </asp:UpdatePanel>
- </form>
- </span>
后台C#代码:
- <span style="font-size:18px;"> protected void Button1_Click(object sender, EventArgs e)
- {
- throw new Exception("出现错误了");
- }
- </span>
Web.config配置:- <span style="font-size:18px;">
- <customErrors mode="On" defaultRedirect="~/Error.aspx"></customErrors>
- </span>
这样设置后当程序出现错误时,就会自动跳转到我们设置好的错误页上。
2,AsyncPostBackErrorMessage和AsyncPostBackError这两个属性,主要是针对错误信息进行处理的。对应的方法为OnAsyncPostBackError(当发生异步通讯错误时)。看这个例子吧:
前台代码:
- <span style="font-size:18px;"> <body>
- <form id="form1" runat="server">
-
- <%--AllowCustomErrorsRedirect属性设置为false,配合后台的自定义错误使用--%>
- <asp:ScriptManager ID="ScriptManager1" runat="server" AllowCustomErrorsRedirect="false" OnAsyncPostBackError="ScriptManager1_AsyncPostBackError">
- </asp:ScriptManager>
-
- <asp:UpdatePanel ID="UpdatePanel1" runat="server">
- <ContentTemplate>
- <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
- </ContentTemplate>
- </asp:UpdatePanel>
-
- <%--自定义错误处理--%>
- <div id="error"></div>
-
- <script type="text/javascript" language="javascript">
- Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(sender, e)
- {
- e.set_errorHandled(true);
- //将信息显示到上面的div区块中innerHTML,这里可以设置默认的错误信息
- $get("error").innerHTML = "Sorry, an error has occurred: " + e.get_error().message;
- setTimeout(function(){ $get("error").innerHTML = ""; }, 3000);//3秒后变为空
- });
- </script>
- </form>
- </body>
- </span>
后台代码:
- <span style="font-size:18px;"> protected void Button1_Click(object sender, EventArgs e)
- {
-
- throw new Exception("错误信息提示!");
- }
-
- protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
- {
-
- ScriptManager.GetCurrent(this).AsyncPostBackErrorMessage = e.Exception.Message;
- }
- </span>
这样我们程序出错时,就出显示出错误信息!