无论在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事件;

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

1_CustomRedirect.aspx中:

页面效果如下:

1_CustomRedirect.aspx.cs中:

Web.Config中:

Error.aspx中:

运行:

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

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

)

2,下面正式进入主题


1CachError.aspx.中:

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

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

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

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

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

运行结果如下:

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

3,思考

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

使其友好,可如下:

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

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

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

运行结果如下:

4,总结

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

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

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

  1. jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法

    jquery ajax success 函数 异步调用方法中不能给全局变量赋值的原因及解决办法   在调用一个jquery的ajax方法时我们有时会需要该方法返回一个值或者给某个全局变量赋值,可是我们 ...

  2. [知识库:python-tornado]异步调用中的上下文控制Tornado stack context

    异步调用中的上下文控制Tornado stack context https://www.zouyesheng.com/context-in-async-env.html 这篇文章真心不错, 非常透彻 ...

  3. 循序渐进做项目系列(2):最简单的C/S程序——消息异步调用与消息同步调用

    上篇博客 循序渐进做项目系列(1):最简单的C/S程序——让服务器来做加法 实现了一个最简单的C/S程序,即让服务器来做加法.当时为了通俗易懂采用了消息异步调用的方式.今天我们要采用消息同步调用的方式 ...

  4. 如何在Spring异步调用中传递上下文

    以下文章来源于aoho求索 ,作者aoho 1. 什么是异步调用? 异步调用是相对于同步调用而言的,同步调用是指程序按预定顺序一步步执行,每一步必须等到上一步执行完后才能执行,异步调用则无需等待上一步 ...

  5. HttpContext在多线程异步调用中的使用方案

    1.在线程调用中,有时候会碰到操作文件之类的功能.对于开发人员来说,他们并不知道网站会被部署在服务器的那个角落里面,因此根本无法确定真实的物理路径(当然可以使用配置文件来配置物理路径),他们唯一知道的 ...

  6. Effective JavaScript Item 63 注意异步调用中可能会被忽略的异常

    异常处理是异步编程的一个难点. 在同步的代码中,异常可以非常easy地通过try catch语句来完毕: try { f(); g(); h(); } catch (e) { // handle an ...

  7. 使用domain模块捕获异步回调中的异常

    和其他服务器端语言相比,貌似node.js 对于异常捕捉确实非常困难. 首先你会想到try/catch ,但是在使用过程中我们会发现并没有真正将错误控制在try/catch 语句中. 为什么? 答案是 ...

  8. node.js 使用domain模块捕获异步回调中的异常

    和其他服务器端语言相比,貌似node.js 对于异常捕捉确实非常困难. 首先你会想到try/catch ,但是在使用过程中我们会发现并没有真正将错误控制在try/catch 语句中. 为什么? 答案是 ...

  9. [置顶] Ruby,Scala和JavaScript中的函数式编程(一)

    函数式编程(英语:Functional programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将电脑运算视为数学上的函数计算,并且避免使用程序状态以及易变对象.函数编程语言最重要的 ...

随机推荐

  1. 在O(1)时间删除链表结点

    //给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点. 1 struct ListNode //结点结构 { int m_nValue; ListNode* m_pNext; ...

  2. Kickstart + http Linux自动化部署服务端

    设备需要开启Network Boot功能.具体PXE技术就另外提,本文主要讲解配置. 在搭建该服务器之前需要关闭SELinux和iptables不然可能dhcp服务都起不来,客户端收不到IP地址,无法 ...

  3. Ajax实现的长轮询不阻塞同一时间内页面的其他Ajax请求(同域请求)

    最近要做一个来电的弹屏功能,利用OM 系统的接口,OM系统发送请求到接口程序,分析数据添加到mysql数据库中,然后把最新的数据id 跟今日来电的总的数量存储到memcache 中.弹屏程序根据读取的 ...

  4. python【第八篇】socket网络编程

    内容大纲 1.socke基础 两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket. 建 立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API ...

  5. iOS - Blocks

    iOS中Blocks的介绍     1. 什么是Blocks Blocks是C语言的扩充功能.就是:带有自动变量的匿名函数. 类似C语言的函数指针.但Blocks不是一个指针,而是一个不带名字的函数, ...

  6. 阻止文件不被上传到iCloud-b

    有空用下 http://www.cocoachina.com/bbs/read.php?tid=86244 http://www.ooso.net/archives/617 http://blog.c ...

  7. 【Java】java的内存浅析

    一.闲谈下 201407月记着那时候身体垮了下来,呵呵.想说,对自己的说,也是对大家的负责吧.那时候胸疼胸闷,然后几乎累垮了,我还坚持了一星期,那一星期真的迷迷糊糊.完全不能看代码,看代码就晕.一直想 ...

  8. maven jetty plugin

    转载:http://blog.163.com/xueling1231989@126/blog/static/1026408072013101311395492/ 前言: 在 maven 下测试调试时, ...

  9. 在SystemOut.log中发现HMGR0152W: 检测到CPU 饥饿的消息 <转载>

    今天系统报警了!!!!!顿时人又不好了!!!查看系统日志, 报错如下: Did not receive adequate CPU time slice. Last known CPU usage ti ...

  10. FileUtils

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...