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_errormessagenamehttpStatusCodeformatlocaleFormat_toFormattedStringstackfileNamelineNumberformatlocaleFormat_toFormattedStringpopStackFrame()_dataItems_response_webRequest_url_headers_body_userContext_httpVerb_executor_invokeCalled_timeout_eventsadd_completedremove_completedcompleted_get_eventHandlerListget_urlset_urlget_headersget_httpVerbset_httpVerbget_bodyset_bodyget_userContextset_userContextget_executorset_executorget_timeoutset_timeoutgetResolvedUrlinvokeconstructor_resultObject_xmlHttpRequestdispatchEventremoveEventListeneronreadystatechangeopenreadyStatesetRequestHeadersendstatusresponseTextchannelresponseXMLstatusTextabortgetAllResponseHeadersgetResponseHeadersendAsBinaryoverrideMimeTypemultipartmozBackgroundRequestwithCredentialsuploadonuploadprogressonabortonerroronloadonloadstartonprogressgetInterface_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()messagenamehttpStatusCodestackfileNamelineNumberpopStackFrameget_errorHandled()set_errorHandled() not implement get_response()_webRequest_resultObject_xmlHttpRequest_responseAvailable_timedOut_timer_aborted_started_onReadyStateChange_clearTimer_onTimeoutget_timedOutget_startedget_responseAvailableget_abortedexecuteRequestgetResponseHeadergetAllResponseHeadersget_responseDataget_statusCodeget_statusTextget_xmlabortconstructor()callBaseMethodgetBaseMethodgetBaseTypegetInterfacesgetNameimplementsInterfaceinheritsFrominitializeBaseisImplementedByisInstanceOfTyperegisterClassregisterInterfaceresolveInheritanceregisterEnumget_webRequest_set_webRequestget_objectconstructor() not implement