前边我们针对以XMLHttpRequest为核心学习了AJAX的相关知识,接下来,重点学习一下微软在ASP.NET中的AJAX的框架的基础学习,主要是AJAXExtension中的几个控件,如下图:
而,这篇博客,我们来重点看一下ScriptManager的学习。而我主要是通过他的属性来进行学习的。
一,概述:ScriptManager控件包括在ASP.NET2.0以上版本的AJAXExtensions中,它用来处理页面上的所有组件以及页面局部更新,生成相关的客户端代理脚本以便能够在JavaScript中访问WebService。所有需要支持ASP.NET AJAX的ASP.NET页面上有且只能有一个ScriptManager控件。
如下():
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
简单理解就是每一个需要异步更新的页面,最开始都需要添加这个控件,保证异步更新的顺利完成。
二,下边看一下它的几个常用属性:
说明 |
|
AllowCustomErrorsRedirect |
该属性为布尔类型,默认值为true,表示在异步更新发生异常时是否使用Web.config中<customErrors>节中的设定。Web.config的<customErrors>节中可以指定应用程序级别的错误处理页面,这将通过重定向至某个专门显示异常的页面来实现 |
AsyncPostBackErrorMessage |
|
AsyncPostBackTimeout |
异步回传时超时限制,默认值为90,单位为秒 |
AsyncPostBackError |
异步回传发生异常时的服务端处理函数,在这里可以捕获信息并作相应的处理。 |
EnablePartialRendering |
该属性可以使页面的某些控件或某个区域实现Ajax类型的异步回送和局部更新功能。若需要启用页面的局部更新模式,则应该将EnablePartialRendering属性设置为true,保持默认值即可 |
ScriptPath |
设置所有的脚本块的根目录,作为全局属性,包括自定义的脚本块或者引用第三方的脚本块。如果在Scripts中的<asp:ScriptReference/>标签中设置了Path属性,它将覆盖该属性 |
ResolveScriptReference |
指定ResolveScriptReference事件的服务器端处理函数,在该函数中可以修改某一条脚本的相关信息如路径、版本等。 |
ScriptMode |
指定ScriptManager发送到客户端的脚本的模式,有四种模式:Auto,Inherit,Debug,Release,默认值为Auto。具体如下表所示 |
ScriptMode的属性值
属性值 |
@H_852_403@
Auto |
@H_852_403@
Debug |
@H_852_403@
Release |
@H_852_403@
Inherit |
@H_852_403@
认真阅读上边的属性和方法,通过实践来了解,就非常容易了,这里我来写其中几个例子。
1,AllowCustomErrorsRedirect属性,当它设为true时就是利用我们web.config的<customErrors>指向的错误页面,如果程序出现了错误,则直接跳转到指定的错误页面。我们来前代码:
<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>
protected void Button1_Click(object sender,EventArgs e)
{
throw new Exception("出现错误了");
}
Web.config配置:
<!--错误页配置,本项目中提前设置好的错误页-->
<customErrors mode="On" defaultRedirect="~/Error.aspx"></customErrors>
这样设置后当程序出现错误时,就会自动跳转到我们设置好的错误页上。
2,AsyncPostBackErrorMessage和AsyncPostBackError这两个属性,主要是针对错误信息进行处理的。对应的方法为OnAsyncPostBackError(当发生异步通讯错误时)。看这个例子吧:
<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>
protected void Button1_Click(object sender,EventArgs e)
{
//自定义错误处理,配合web.config文件中的错误配置节点customErrors(设置为on的时候才生效,同时还要制定错误页)和AllowCustomErrorsRedirect(是否允许customErrors)使用
throw new Exception("错误信息提示!");
}
//异步刷新出现错误时,触发的事件
protected void ScriptManager1_AsyncPostBackError(object sender,AsyncPostBackErrorEventArgs e)
{
//客户端接受到的错误的信息
ScriptManager.GetCurrent(this).AsyncPostBackErrorMessage = e.Exception.Message;
}
这样我们程序出错时,就出显示出错误信息!