msdn官方示例:http://msdn.microsoft.com/zh-cn/library/bb398934%28v=VS.90%29.aspx
总的来说,
1,注册ScriptManager的AsyncPostBackError事件,并在服务器实现它,并抛出被处理过的异常(根据是否为null,可能需要抛出e.Exception或e.Exception.innerException)
2,客户端用JS来响应,Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);添加处理程序
3,实现EndRequestHandler,错误信息基本在第二个参数"args“里面,
4,此时已经完成,由于网上没搜到现成文档(有的话请留言),这个args里面到底有什么经过我的枚举,暂列如下
内容比较多,我还是先把枚举的方法写出来吧:
注:下面内容是临时写的,并没有用到递归,也就是说,可能结果还不是完整的,有兴趣的可以自己拿去改造
但我们一般用到的,基本上都在了
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
function EndRequestHandler(sender, args) {
//if (args.get_error() != undefined) {alert(args.get_error().message.replace(/.*Exception:/,'')); args.set_errorHandled(true); }
if (args.get_error() != undefined) {
var members = 'The \'args\' members are:\n\n';
for (var i in args) {
members += '\t' + i;
var ai = eval("args." + i);
if (typeof ai == "function") {
try {
members += "()";
ai = eval("args." + i+"()");
} catch (err) {
members += " not implement \n";
continue;
}
}
members += '\n';
if (typeof ai == "string") continue;
for (var t in ai) {
members += '\t\t' + t;
if (typeof ai == "function")
var ait = eval("args." + i + "()." + t);
else
var ait = eval("args." + i + "." + t);
if (typeof ait == "function") {
try {
members += "()";
ait = eval("args." + i + "." + t + "()");
} catch (err) {
members += " not implement \n";
continue;
}
}
members += "\n";
if (typeof ait == "string") continue;
for (var m in ait) {
members += '\t\t\t' + m + '\n';
}
}
}
document.write("<textarea style='width:1000px; height:600px;'>"+members+"</textarea>");//members如果显示请自行处理
args.set_errorHandled(true);
}
}
结果:
The 'args' members are:
_errorHandled
_error
message
name
httpStatusCode
format
localeFormat
_toFormattedString
stack
fileName
lineNumber
format
localeFormat
_toFormattedString
popStackFrame()
_dataItems
_response
_webRequest
_url
_headers
_body
_userContext
_httpVerb
_executor
_invokeCalled
_timeout
_events
add_completed
remove_completed
completed
_get_eventHandlerList
get_url
set_url
get_headers
get_httpVerb
set_httpVerb
get_body
set_body
get_userContext
set_userContext
get_executor
set_executor
get_timeout
set_timeout
getResolvedUrl
invoke
constructor
_resultObject
_xmlHttpRequest
dispatchEvent
removeEventListener
onreadystatechange
open
readyState
setRequestHeader
send
status
responseText
channel
responseXML
statusText
abort
getAllResponseHeaders
getResponseHeader
sendAsBinary
overrideMimeType
multipart
mozBackgroundRequest
withCredentials
upload
onuploadprogress
onabort
onerror
onload
onloadstart
onprogress
getInterface
_responseAvailable
_timedOut
_timer
_aborted
_started
_onReadyStateChange()
_clearTimer()
_onTimeout()
get_timedOut()
get_started()
get_responseAvailable()
get_aborted()
executeRequest() not implement
getResponseHeader() not implement
getAllResponseHeaders() not implement
get_responseData() not implement
get_statusCode() not implement
get_statusText() not implement
get_xml() not implement
abort()
constructor()
get_webRequest()
_set_webRequest()
get_object() not implement
get_dataItems()
get_error()
message
name
httpStatusCode
stack
fileName
lineNumber
popStackFrame
get_errorHandled()
set_errorHandled() not implement
get_response()
_webRequest
_resultObject
_xmlHttpRequest
_responseAvailable
_timedOut
_timer
_aborted
_started
_onReadyStateChange
_clearTimer
_onTimeout
get_timedOut
get_started
get_responseAvailable
get_aborted
executeRequest
getResponseHeader
getAllResponseHeaders
get_responseData
get_statusCode
get_statusText
get_xml
abort
constructor()
callBaseMethod
getBaseMethod
getBaseType
getInterfaces
getName
implementsInterface
inheritsFrom
initializeBase
isImplementedBy
isInstanceOfType
registerClass
registerInterface
resolveInheritance
registerEnum
get_webRequest
_set_webRequest
get_object
constructor() not implement