ASP.NET AJAX入门系列(8):自定义异常处理

本文介绍如何在ASP.NET AJAX中自定义UpdatePanel控件的错误处理过程,包括服务端异常处理及客户端脚本异常处理的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://www.cnblogs.com/Terrylee/archive/2006/11/13/Customizing_Error_Handling.html

UpdatePanel控件异步更新时,如果有错误发生,默认情况下会弹出一个Alert对话框显示出错误信息,这对用户来说是不友好的,本文看一下如何在服务端和客户端脚本中自定义异常处理,翻译自官方文档。

 

主要内容

1.在服务端自定义异常处理

2.在客户端脚本中自定义异常处理

 

一.在服务端自定义异常处理

1.添加ASPX页面并切换到设计视图。

2.在工具箱中AJAX Extensions标签下双击ScriptManagerUpdatePanel控件添加到页面中。

3.在UpdatePanel控件中添加两个TextBox,一个Label,一个Button和一些文字,并设置ButtonText属性值为“Calculate”。

4.双击Calculate按钮并添加如下代码到事件处理中。

protected   void  Button1_Click( object  sender, EventArgs e)
{
    
try
    {
        
int  a  =  Int32.Parse(TextBox1.Text);
        
int  b  =  Int32.Parse(TextBox2.Text);
        
int  res  =  a  /  b;
        Label1.Text 
=  res.ToString();
    }

    
catch  (Exception ex)
    {
        
if  (TextBox1.Text.Length  >   0   &&  TextBox2.Text.Length  >   0 )
        {
            ex.Data[
" ExtraInfo " =   "  You can't divide  "   +
                TextBox1.Text 
+   "  by  "   +  TextBox2.Text  +   " . " ;
        }
        
throw  ex;
    }
}

 

在事件处理代码中包含了一个try-catch语句块,在try中进行除法运算,如果运算失败,在catch中设置ExtraInfo信息并重新抛出异常。

5.切换到设计视图并选择ScriptManager控件。

6.在属性窗口中的工具栏中,选择事件按钮,并双击AsyncPostBackError

7.添加如下代码到AsyncPostBackError事件处理。

protected   void  ScriptManager1_AsyncPostBackError( object  sender, AsyncPostBackErrorEventArgs e)
{
    
if  (e.Exception.Data[ " ExtraInfo " !=   null )
    {
        ScriptManager1. AsyncPostBackErrorMessage 
=
            e.Exception.Message 
+
            e.Exception.Data[
" ExtraInfo " ].ToString();

    }
    
else
    {       ScriptManager1.AsyncPostBackErrorMessage 
=

            
" An unspecified error occurred. " ;
    }
}

检测异常的ExtraInfo是否为空,并设置为ScriptManager控件的AsyncPostBackErrorMessage,如果不设置则会创建一个默认的异常。

8.保存并按Ctrl + F5运行。

9.在每一个文本框中输入大于零的数,并单击Calculate按钮提交成功。

10.在第二个文本框中输入0,单击Calculate将会引发一个异常。浏览器将会显示一个对话框,提示的信息为我们在服务端设置的信息。

二.在客户端脚本中自定义异常处理

前面的异常处理是在服务端通过设置ScriptManager控件的属性来进行处理,下面将看一下如何在客户端脚本中使用PageRequestManager类来进行异常处理,并用<div>元素来代替浏览器默认的Alert对话框。

1.在我们前面创建的页面中,切换到代码视图。

2.添加如下的HTML元素到页面中(官方文档中有点错误)

< div  id ="AlertDiv"  language ="javascript"  onclick ="return AlertDiv_onclick()" >
    
< div  id ="AlertMessage" >
    
</ div >
    
< br  />
    
< div  id ="AlertButtons" >
        
< input  id ="OKButton"  type ="button"  value ="OK"  runat ="server"  onclick ="ClearErrorState()"   />
    
</ div >
</ div >

 

3.在HEAD元素中添加如下样式标记。

< style  type ="text/css" >
    #UpdatePanel1 
{}{
      width
:  200px ;  height :  50px ;
      border
:  solid 1px gray ;
    
}

    #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 >

4.切换到设计视图并确保你的页面如下所示。

5.在属性窗口中的下拉列表中选择DOCUMENT元素(它对应的是页面<Body>元素),设置Id属性值为bodytag

6.切换到代码视图。

7.添加如下<script>代码块。

< script  type ="text/javascript"  language ="javascript" >
var  divElem  =   ' AlertDiv ' ;
var  messageElem  =   ' AlertMessage ' ;
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)
   {
       
var  errorMessage;
       
if  (args.get_response().get_statusCode()  ==   ' 200 ' )
       {
           errorMessage 
=  args.get_error().message;
       }
       
else
       {
           
//  Error occurred somewhere other than the server page.
           errorMessage  =   ' An unspecified error occurred.  ' ;
       }
       args.set_errorHandled(
true );
       ToggleAlertDiv(
' visible ' );
       $get(messageElem).innerHTML 
=  errorMessage;
   }
}
</ script >

在代码块中,主要做以下几件事:

1)定义PageRequestManager类的endRequest事件处理,在事件处理中,当有错误发生时将显示AlertDiv

2)定义ToggleAlertDiv函数,当有错误发生时它用来显示或者隐藏AlertDiv元素,并且改变页面的背景颜色。

3)定义ClearErrorState函数,它用来隐藏错误信息的UI

8.保存并按Ctrl + F5运行。

9.在每一个文本框中输入大于零的数,并单击Calculate按钮提交成功。

10.在第二个文本框中输入0,单击Calculate将会引发一个异常。这时自定义的AlertDiv将会显示出来代替了默认的Alert对话框,如下图所示:

[翻译自官方文档]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值