项目使用了Telerik Ajax控件,由于Telerik Ajax基于MS AJAX并在异常处理方面与MS Ajax 保持一致 http://www.telerik.com/help/aspnet-ajax/ajax-error-handling.html
方案:
服务器端:在Application_Error中,把错误信息写入日志,但是并不通过Server.Transfer跳转到某个错误显示页面,否则ajax客户端无法识别错误信息。
void Application_Error(object sender, EventArgs e) { // Code that runs when an unhandled error occurs Exception error = Server.GetLastError(); ILog logger = LogManager.GetLogger(typeof(Global)); logger.Error("unhandled error occurred", error); Server.ClearError(); }
客户端: 利用EndRequestHandler处理函数,判断是否有异常发生,若有则显示异常用户友好的异常信息。
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) { if (args.get_error() != undefined && args.get_error().httpStatusCode == '500') { alert("error occurred..."); } }
参考:
服务器端处理异常 http://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx
客户端处理Ajax异常 http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.asyncpostbackerror.aspx