首页 新闻 搜索 专区 学院

关于asp.net中部分页面使用了UpdatePanel如何实现通用的错误处理问题

0
悬赏园豆:100 [待解决问题]
我现在有个项目中部分页面中使用了UpdatePanel控件,现在想在Application_Error事件中捕获异常
 通过Global.asax文件的Application_Error方法来捕获异常
voidApplication_Error(objectsender, EventArgs e)
{
//在出现未处理的错误时运行的代码
HttpUnhandledException eHttp=this.Server.GetLastError()asHttpUnhandledException;
Exception eApp=eHttp.InnerException;//可以返回异常
Response.Redirect("Default3.aspx?exe='"+Server.UrlEncode(eApp.Message)+"'");
Server.ClearError();
Response.End();
}
 
现在有个问题是使用了UpdatePanel的页面会有问题,谁有没有好的办法实现通用的异常处理?
注:项目中功能比较多,每个页面加代码工作量太大了
sgm的主页 sgm | 初学一级 | 园豆:57
提问于:2013-07-26 17:42
< >
分享
所有回答(4)
0

public class PageBase:System.Web.UI.Page
{
protected override void OnError(EventArgs e)
{
}
}

 

你创建这么个PageBase类,然后所有页面类都去继承它,看看异常处理怎样

 

Yu | 园豆:12950 (专家六级) | 2013-07-26 22:57
0

UpdatePanel使用这个来刷新部分数据, 还不如用javascript+html从服务器接口取得数据来刷新。 

风浪 | 园豆:2866 (老鸟四级) | 2013-07-27 04:29
0

Application_Error里要判断是普通请求还是ajax请求,然后选择跳转或者其他操作:

HttpRequest request = HttpContext.Current.Request;
string header = request.Headers["X-MicrosoftAjax"];
if(header != null && header == "Delta=true")
{
  // ajax请求
}
else
{
  // 普通请求
}

 

也可以在Application_Error里获取ScriptManager,然后做一些处理,像这样:

    Page page = HttpContext.Current.Handler as Page;
    if (page != null)
    {
      ScriptManager sm = ScriptManager.GetCurrent(page);
      if (sm != null)
      {
        sm.IsInAsyncPostBack...

   sm.AsyncPostBackSourceElementID...
      }
    }

 

用ScriptManager的AsyncPostBackError事件,如果你的ScriptManager是在一个母板页的话,然后在里面把异常处理掉:http://msdn.microsoft.com/en-us/library/bb398934(v=vs.100).aspx

客户端显示异常的话,在endrequest理处理一下(同样还是要有一个公共的地方可以放置脚本):

Sys.Application.add_load(function() {
  Sys.WebForms.PageRequestManager.getInstance().add_endRequest(...
});

囧月 | 园豆:1139 (小虾三级) | 2013-07-27 09:05

我目前比较倾向在基类的page_error事件里面处理,因为在Application_Error里面截取不到错误,UpdatePanel会先弹出一个500的错误,在page_error可以获取到错误,

但是就是不知道如何跳转?

支持(0) 反对(0) sgm | 园豆:57 (初学一级) | 2013-07-27 10:18

@sgm: 要做跳转还是得在客户端endRequest方法里跳转,需要判断返回的结果,你可要参照那个msdn:http://msdn.microsoft.com/zh-cn/library/bb398934(v=vs.100).aspx

ScriptManager的AsyncPostBackError事件里面处理也挺合适的

支持(0) 反对(0) 囧月 | 园豆:1139 (小虾三级) | 2013-07-27 10:30
0

提醒:大家都被微软前期的设计坑了

【秦时明月】 | 园豆:851 (小虾三级) | 2013-07-31 14:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册