错误处理

本文演示了如何在ASP.NET AJAX中处理异步回传时发生的错误。通过客户端JavaScript和服务器端C#代码相结合的方式,实现了异常捕获及友好的错误提示。

在页面回传时如果发生了异常AsyncPostBackError事件将被触发,错误信息的处理依赖于AllowCustomErrors属性、AsyncPostBackErrorMessage属性和Web.config中的<customErrors>配置区。下面看一个简单的错误处理例子,在AsyncPostBackError事件中捕获到异常信息并设置AsyncPostBackErrorMessage属性。

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

<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 id="Head1" 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 id="bodytag">

    
<form id="form1" runat="server">

        
<div>

            
<asp:ScriptManager ID="ScriptManager1" 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" ID="UpdatePanel1">

                
<ContentTemplate>

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

                        
<asp:Label ID="UpdatePanelMessage" runat="server" />

                        
<br />

                        Last update:

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

                        .

                        
<br />

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

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

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

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

                        
<br />

                    
</asp:Panel>

                
</ContentTemplate>

            
</asp:UpdatePanel>

            
<div id="AlertDiv">

                
<div id="AlertMessage">

                
</div>

                
<br />

                
<div id="AlertButtons" >

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

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

                
</div>

           
</div>

    
</form>

</body>

</html>

运行后时界面:

发生异常信息:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值