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

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

 

主要内容

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

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

 

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

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

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

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

<?XML:NAMESPACE PREFIX = V />ASP.NET AJAX入门系列(8):自定义异常处理

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

ASP.NET AJAX入门系列(8):自定义异常处理protected void Button1_Click(object sender, EventArgs e)
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理    
try
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理    
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理        
int a = Int32.Parse(TextBox1.Text);
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理        
int b = Int32.Parse(TextBox2.Text);
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理        
int res = a / b;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理        Label1.Text 
= res.ToString();
ASP.NET AJAX入门系列(8):自定义异常处理    }

ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    
catch (Exception ex)
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理    
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理        
if (TextBox1.Text.Length > 0 && TextBox2.Text.Length > 0)
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理        
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理            ex.Data[
"ExtraInfo"= " You can't divide " +
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理                TextBox1.Text 
+ " by " + TextBox2.Text + ".";
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理        }

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

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

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

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

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

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

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

ASP.NET AJAX入门系列(8):自定义异常处理protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理    
if (e.Exception.Data["ExtraInfo"!= null)
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理    
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理        ScriptManager1. AsyncPostBackErrorMessage 
=
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理            e.Exception.Message 
+
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理            e.Exception.Data[
"ExtraInfo"].ToString();
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    }

ASP.NET AJAX入门系列(8):自定义异常处理    
else
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理    
ASP.NET AJAX入门系列(8):自定义异常处理{       ScriptManager1.AsyncPostBackErrorMessage =
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理            
"An unspecified error occurred.";
ASP.NET AJAX入门系列(8):自定义异常处理    }

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

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

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

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

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

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

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

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

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

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

ASP.NET AJAX入门系列(8):自定义异常处理<div id="AlertDiv" language="javascript" onclick="return AlertDiv_onclick()">
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    
<div id="AlertMessage">
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    
</div>
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    
<br />
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    
<div id="AlertButtons">
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理        
<input id="OKButton" type="button" value="OK" runat="server" onclick="ClearErrorState()" />
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    
</div>
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理
</div>

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

ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理<style type="text/css">ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理    #UpdatePanel1 
{ASP.NET AJAX入门系列(8):自定义异常处理}{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理      width
: 200px; height: 50px;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理      border
: solid 1px gray;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    
}

ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理    #AlertDiv
{ASP.NET AJAX入门系列(8):自定义异常处理}{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    left
: 40%; top: 40%;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    position
: absolute; width: 200px;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    padding
: 12px; 
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    border
: #000000 1px solid;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    background-color
: white; 
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    text-align
: left;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    visibility
: hidden;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    z-index
: 99;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    
}

ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理    #AlertButtons
{ASP.NET AJAX入门系列(8):自定义异常处理}{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    position
: absolute; right: 5%; bottom: 5%;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理    
}

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

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

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

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

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

6.切换到代码视图。

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

ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理<script type="text/javascript" language="javascript">ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理
var divElem = 'AlertDiv';
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理
var messageElem = 'AlertMessage';
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理
var bodyTag = 'bodytag';
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理
function ToggleAlertDiv(visString)
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理     
if (visString == 'hidden')
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理     
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理         $get(bodyTag).style.backgroundColor 
= 'white';                         
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理     }

ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理     
else
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理     
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理         $get(bodyTag).style.backgroundColor 
= 'gray';                         
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理 
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理     }

ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理     
var adiv = $get(divElem);
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理     adiv.style.visibility 
= visString;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理 
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理}

ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理
function ClearErrorState() ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理     $get(messageElem).innerHTML 
= '';
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理     ToggleAlertDiv('hidden');                     
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理}

ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理
function EndRequestHandler(sender, args)
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理   
if (args.get_error() != undefined)
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理   
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理       
var errorMessage;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理       
if (args.get_response().get_statusCode() == '200')
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理       
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理           errorMessage 
= args.get_error().message;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理       }

ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理       
else
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理ASP.NET AJAX入门系列(8):自定义异常处理       
ASP.NET AJAX入门系列(8):自定义异常处理{
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理           
// Error occurred somewhere other than the server page.
ASP.NET AJAX入门系列(8):自定义异常处理

ASP.NET AJAX入门系列(8):自定义异常处理           errorMessage 
= 'An unspecified error occurred. ';
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理       }

ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理       args.set_errorHandled(
true);
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理       ToggleAlertDiv('visible');
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理       $get(messageElem).innerHTML 
= errorMessage;
ASP.NET AJAX入门系列(8):自定义异常处理
ASP.NET AJAX入门系列(8):自定义异常处理   }

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

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

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

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

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

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

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

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

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

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

转载于:https://www.cnblogs.com/hzuIT/articles/752174.html