ASP.NET AJAX in Action—ScriptManager异常处理示例

使用 OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" 捕获异常,

使用ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message; 输出异常信息,在前台添加Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 方法,当回发结束时,在div中显示异常消息!

类似的方法有:

add_beginRequest()   add_beginRequest(handler) Variant

add_endRequest()   add_endRequest(handler) Variant

add_initializeRequest()   add_initializeRequest(handler) Variant

add_pageLoaded()   add_pageLoaded(handler) Variant

add_pageLoading()   add_pageLoading(handler) Variant

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

protected void ErrorProcessClick_Handler(object sender, EventArgs e)

{

// This handler demonstrates an error condition. In this example

// the server error gets intercepted on the client and an alert is shown.

throw new ArgumentException();

}

protected void SuccessProcessClick_Handler(object sender, EventArgs e)

{

// This handler demonstrates no server side exception.

UpdatePanelMessage.Text = "The asynchronous postback completed successfully.";

}

protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)

{

ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message;

}

</script>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title>PageRequestManager endRequestEventArgs Example</title>

<style type="text/css">

body {

font-family: Tahoma;

}

#AlertDiv{

left: 40%; top: 40%;

position: absolute; width: 200px;

padding: 12px;

border: #000000 1px solid;

background-color: white;

text-align: left;

visibility: hidden;

z-index: 99;

}

#AlertButtons{

position: absolute;

right: 5%;

bottom: 5%;

}

</style>

</head>

<body >

<form runat="server">

<div>

<asp:ScriptManager runat="server"

OnAsyncPostBackError="ScriptManager1_AsyncPostBackError">

</asp:ScriptManager>

<script type="text/javascript" language="javascript">

var divElem = 'AlertDiv';

var messageElem = 'AlertMessage';

var errorMessageAdditional = 'Please try again.';

var bodyTag = 'bodytag';

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

function ToggleAlertDiv(visString)

{

if (visString == 'hidden')

{

$get(bodyTag).style.backgroundColor = 'white';

}

else

{

$get(bodyTag).style.backgroundColor = 'gray';

}

var adiv = $get(divElem);

adiv.style.visibility = visString;

}

function ClearErrorState() {

$get(messageElem).innerHTML = '';

ToggleAlertDiv('hidden');

}

function EndRequestHandler(sender, args)

{

if (args.get_error() != undefined && args.get_error().httpStatusCode == '500')

{

var errorMessage = args.get_error().message

args.set_errorHandled(true);

ToggleAlertDiv('visible');

$get(messageElem).innerHTML = '"' +

errorMessage + '" ' + errorMessageAdditional;

}

}

</script>

<asp:UpdatePanel runat="Server" UpdateMode="Conditional" >

<ContentTemplate>

<asp:Panel runat="server" GroupingText="Update Panel">

<asp:Label runat="server" />

<br />

Last update:

<%= DateTime.Now.ToString() %>

.

<br />

<asp:Button runat="server" Text="Submit Successful Async Postback"

OnClick="SuccessProcessClick_Handler" OnClientClick="ClearErrorState()" />

<asp:Button runat="server" Text="Submit Async Postback With Error"

OnClick="ErrorProcessClick_Handler" OnClientClick="ClearErrorState()" />

<br />

</asp:Panel>

</ContentTemplate>

</asp:UpdatePanel>

<div >

<div >

</div>

<br />

<div >

<input type="button" value="OK"

runat="server" onclick="ClearErrorState()" />

</div>

</div>

</form>

</body>

</html>