[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

时间:2023-01-26 11:15:27

无论在Window应用程序,还是Web应用程序以对用户友好的方式显示运行时的异常都是很有必要,尤其对于可能有很多不确定因素导致异常的Web应用程序;在传统的Web开发中,处理异常的方式——设计专门一个页面作为出现异常后跳转的页面,对于这个功能,ASP.net以及IIS有内建支持。而对于Ajax类型的应用程序来讲,一个页面就是一个程序,如果贸然将用户引导至另一个页面(即另一个程序),显得有些唐突。

但是Ajax程序也可以实现以上的异常处理方法(接下来的介绍中会提到);Asp.Net  Ajax有一套自己的针对异步回调发生异常的处理机制。

本篇博客将通过一个实例来介绍:Ajax程序:处理异步调用中的异常——使用Asp.Net Ajax内建的异常处理方法


1,引题


CatchError.aspx:

添加控件ScriptManager、UpdatePanel(两者配合实现异步);UpdatePanel中添加一个按钮Button,此Button的Onclick响应Button1_Click事件;

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

(注:AllowCustomErrorsRedirect属性,默认值为true,表示在异步请求发生异常时是否沿用Web.config中customErrors节中的设定,Web.config中customErrors节中可以指定应用程序级别的错误处理页面(对于Ajax程序,尽量避免这种处理异常的方式(跳转到另一页面的方式));这种方式的简单例子如下:

1_CustomRedirect.aspx中:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

页面效果如下:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

1_CustomRedirect.aspx.cs中:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

Web.Config中:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

Error.aspx中:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

运行:

点击按钮“Button”,跳转到Error.aspx页面,如下:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

弹出如下页面,页面信息如下:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

)

2,下面正式进入主题


1CachError.aspx.中:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

(注:OnAsyncPostBackError="ScriptManager1_AsyncPostBackError":ScriptManager的AsyncPostBackError事件的处理函数为ScriptManager1_AsyncPostBackError()。AsyncPostBackError事件将在异步回送引发异常时触发。在该事件的处理函数中,我们可分析异常产生的原因并根据需要过滤敏感信息)

2CachError.aspx.cs中,Button1_Click()事件:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

CachError.aspx.cs中,ScriptManager1_AsyncPostBackError()事件:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

(注:AsyncPostBackErrorMessage属性:表示了异步回送过程中发生的异常将显示出的信息)

3IE中运行:点击下面按钮Button:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

运行结果如下:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

(中运行,都没有运行成功,不知道为什么,也没有研究出来,最后我猜测应该是浏览器的原因)

3,思考

异常处理完了,但是却看似不是很友好,如何做出友好的异常处理显示呢?

使其友好,可如下:

1)在客户端CachError.aspx.cs中添加如下Javascript代码:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

(注:Sys.WebForms.PageRequestManager.getInstance():获得PageRequestManager对象的实例;为其endRequest事件添加了函数function(sender,e){…},在该处理函数中,我们即可访问到异常的详细信息)

2)运行:点击下面按钮Button:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

运行结果如下:

[置顶] Ajax程序:处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

4,总结

本篇博客通过一个实例介绍了:Ajax程序处理异步调用中的异常(使用Asp.Net Ajax内建的异常处理方法)

通过本博客您还可以了解:ScriptManager的AsyncPostBackError事件、AsyncPostBackErrorMessage属性;PageRequestManager对象及其endRequest事件。