public class PageBase:System.Web.UI.Page
{
protected override void OnError(EventArgs e)
{
}
}
你创建这么个PageBase类,然后所有页面类都去继承它,看看异常处理怎样
UpdatePanel使用这个来刷新部分数据, 还不如用javascript+html从服务器接口取得数据来刷新。
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(...
});
我目前比较倾向在基类的page_error事件里面处理,因为在Application_Error里面截取不到错误,UpdatePanel会先弹出一个500的错误,在page_error可以获取到错误,
但是就是不知道如何跳转?
@sgm: 要做跳转还是得在客户端endRequest方法里跳转,需要判断返回的结果,你可要参照那个msdn:http://msdn.microsoft.com/zh-cn/library/bb398934(v=vs.100).aspx
ScriptManager的AsyncPostBackError事件里面处理也挺合适的
提醒:大家都被微软前期的设计坑了