2

Cette chose me rend fou. J'essaie d'intercepter une exception côté serveur, lors d'une publication partielle, en définissant un message d'erreur à afficher sur le client dans une alerte javascript.Gérer les messages d'erreur Asynch avec ScriptManager

Mais je viens de recevoir l'erreur suivante sur la console Firefox:

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] 

et aucune alerte du tout.

J'ai eu ce problème sur un projet complexe impliquant des composants Telerik, mais j'ai réduit le problème à ses fondamentaux, following this simple example, et le problème existe toujours.

Le cas:

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); 
} 

J'ai essayé avec VS2010/.NET 4.0 et VS2008 /.NET 3.5, dans Firefox et Internet Explorer, le problème est le même.

S'il vous plaît, quelqu'un a une idée?

Répondre

2

Outre la gestion de la logique côté serveur, vous devez ajouter un script afin de gérer les erreurs côté client.

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

Ce script gère l'événement end_Request et s'il y a eu une alerte d'incendie.

+0

Parfait! Ça marche! J'ai complètement raté ce passage. – tanathos

Questions connexes