现在的位置: 首页 > 综合 > 正文

AJAX——ASP.NET AJAX框架(一)ScriptManager

2014年01月03日 ⁄ 综合 ⁄ 共 3853字 ⁄ 字号 评论关闭

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


    而,这篇博客,我们来重点看一下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

该属性表示了异步回送过程中发生的异常将显示出的消息,我们可在ScriptManager的声明中设置这个属性

AsyncPostBackTimeout

异步回传时超时限制,默认值为90,单位为秒

AsyncPostBackError

异步回传发生异常时的服务端处理函数,在这里可以捕获信息并作相应的处理。

EnablePartialRendering

该属性可以使页面的某些控件或某个区域实现Ajax类型的异步回送和局部更新功能。若需要启用页面的局部更新模式,则应该将EnablePartialRendering属性设置为true,保持默认值即可

ScriptPath

设置所有的脚本块的根目录,作为全局属性,包括自定义的脚本块或者引用第三方的脚本块。如果在Scripts中的<asp:ScriptReference/>标签中设置了Path属性,它将覆盖该属性

ResolveScriptReference

指定ResolveScriptReference事件的服务器端处理函数,在该函数中可以修改某一条脚本的相关信息如路径、版本等。

ScriptMode

指定ScriptManager发送到客户端的脚本的模式,有四种模式:AutoInheritDebugRelease,默认值为Auto。具体如下表所示


     ScriptMode的属性值

属性值

说明

Auto

该属性值用于根据web.config配置中的retail配置节的值来决定脚本的模式。如果retail配置节的值为true,则把发布模式的脚本发送到客户端,反之则发送调试脚本

Debug

该属性值用于当retail配置节的值不为true时,则发送debug版本的客户端脚本

Release

该属性值用于当retail配置节的值不为false时,则发送Release版本的客户端脚本

Inherit

该属性值意义同Auto相同



        认真阅读上边的属性和方法,通过实践来了解,就非常容易了,这里我来写其中几个例子。

         1AllowCustomErrorsRedirect属性,当它设为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>



      后台C#代码:

	protected void Button1_Click(object sender, EventArgs e)
	{
		throw new Exception("出现错误了");
	}


      Web.config配置:

    <!--错误页配置,本项目中提前设置好的错误页-->
    <customErrors mode="On" defaultRedirect="~/Error.aspx"></customErrors>


          这样设置后当程序出现错误时,就会自动跳转到我们设置好的错误页上。


 

        2AsyncPostBackErrorMessageAsyncPostBackError这两个属性,主要是针对错误信息进行处理的。对应的方法为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;
		}


     这样我们程序出错时,就出显示出错误信息!



         这里我举了两个例子,来学习ScriptManager的属性方法,其他的也需要我们通过实践,来理解这些属性和方法的意义,这样我们才能更好的掌握。这里英文相对来说多了些,还是非常需要耐下心来认真读英文理解。总而言之,这里的控件学习和我们的控件学习没有什么区别,几个属性,方法完事。重要的是我们用一用,这样就能再用了,里边的属性方法不会了,我们可以有针对性的上网查一下!!!下一篇,学习一个非常重要的控件UpdatePanle控件。其实这篇博客里边也涉及到了。

抱歉!评论已关闭.