2011-08-05 70 views
2

這件事讓我瘋狂。我試圖攔截一個異常服務器端,在部分回發期間,設置一個錯誤消息,以顯示在客戶端的JavaScript警報。使用ScriptManager處理Asynch錯誤消息

但我只是收到火狐控制檯上出現以下錯誤:

uncaught exception: [Exception... "'Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: Tentativo di divisione per zero.' when calling method: [nsIDOMEventListener::handleEvent]" nsresult: "0x8057001c (NS_ERROR_XPC_JS_THREW_JS_OBJECT)" location: "JS frame :: resource://firebug_rjs/net/spy.js :: callPageHandler :: line 796" data: no] 

,並沒有警覺的。

我在涉及Telerik組件的複雜項目中遇到了這個問題,但我已將問題簡化爲其基本原理,following this simple example,並且問題仍然存在。

的情況:

Default.aspx的

<form id="form1" runat="server"> 
<asp:ScriptManager ID="scriptManager" runat="server" OnAsyncPostBackError="scriptManager_OnAsyncPostBackError"></asp:ScriptManager> 
<div> 
    <asp:UpdatePanel ID="upd" runat="server"> 
     <ContentTemplate> 
      <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
      <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox> 
      <asp:Button ID="btnSend" runat="server" Text="Send" OnClick="btnSend_OnClick" /> 
     </ContentTemplate> 
    </asp:UpdatePanel> 
</div> 
</form> 

Default.aspx.cs

protected void scriptManager_OnAsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e) 
{ 
    scriptManager.AsyncPostBackErrorMessage = e.Exception.Message; 
} 

protected void btnSend_OnClick(object sender, EventArgs e) 
{ 
    // this will throw and Exception 
    int aa = Convert.ToInt32(TextBox1.Text)/Convert.ToInt32(TextBox2.Text); 
} 

我試過用VS2010/.NET 4.0和VS2008與/.NET 3.5,在Firefox和Internet Explorer中,問題是一樣的。

請問,任何人有一些想法?

回答

2

除了在服務器端處理邏輯,您必須添加腳本才能處理客戶端的錯誤。

<script> 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler); 
     function EndRequestHandler(sender, args) { 
      if (args.get_error() != undefined) { 
       alert(args.get_error()); 
      } 
     } 
    </script> 

該腳本處理end_Request事件,並且如果有一些錯誤會引發警報。

+0

太棒了!有用!我完全錯過了這段經文。 – tanathos