2009-12-01 11 views
13

Cuando se producen excepciones en los UpdatePanels que he implementado en la aplicación web ASP.NET que estoy creando, causan un error de JavaScript en la página con algún resultado de alto nivel de error disponible en la alerta. Esto es bueno para el desarrollo, pero tan pronto como el sistema está en producción, obviamente no es bueno por múltiples razones. Puedo rodear las actividades problemáticas con Try Catch, etc. para controlar el error de Javascript, pero en algunos casos, deseo realizar acciones en la página principal, etc. para respaldar la experiencia del usuario.UpdatePanel Exception Handling

¿Cómo manejo los errores que ocurren en UpdatePanels correctamente para proporcionar una implementación sin errores y sin errores de Javascript?

Respuesta

18

Se puede utilizar una combinación de AsyncPostBackError el evento en el ScriptManager (del lado del servidor) y el evento EndRequest en el PageRequestManager (del lado del cliente) para manejar completamente los errores del lado del servidor cuando se utiliza el UpdatePanel.

Aquí hay un par de recursos que deberían ayudarle a:

Customizing Error Handling for ASP.NET UpdatePanel Controls

Error Handling Customization for ASP.NET UpdatePanel

Aquí está un ejemplo sencillo:

// Server-side 
protected void ScriptManager1_AsyncPostBackError(object sender, 
    AsyncPostBackErrorEventArgs e) { 
    ScriptManager1.AsyncPostBackErrorMessage = 
     "An error occurred during the request: " + 
     e.Exception.Message; 
} 


// Client-side 
<script type="text/javascript"> 
    function pageLoad() { 
    Sys.WebForms.PageRequestManager.getInstance(). 
     add_endRequest(onEndRequest); 
    } 

    function onEndRequest(sender, args) { 
    var lbl = document.getElementById("Label1"); 
    lbl.innerHTML = args.get_error().message; 
    args.set_errorHandled(true); 
    } 
</script> 
+0

Gracias por esto, muy apreciado. – Chris

+0

Esto funcionó muy bien después de que solucioné otro problema relacionado: https://stackoverflow.com/questions/1671881/scriptmanager1-asyncpostbackerrormessage-not-showing-error-message – madamission

0

¿Podría anular el método de error de nivel de página, detectar la excepción y manejar cómo mejor le parezca?

protected override void OnError(EventArgs e) 
{ 
    //show error message here 
} 
9

escribí aquí acerca de una manera más sencilla de hacer esto: http://www.wagnerdanda.me/2010/01/asp-net-ajax-updatepanel-error-exception-handling-the-simple-way/

Si lo que desea es fijar el navegador javascript error y mostrar el mensaje de excepción para el usuario, sólo tiene que añadir esto a su Maestra algún lugar después de la declaración de formulario:

<!-- This script must be placed after the form declaration --> 
<script type="text/javascript"> 
    Sys.Application.add_load(AppLoad); 

    function AppLoad() { 
     Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest); 
    } 

    function EndRequest(sender, args) { 
     // Check to see if there's an error on this request. 
     if (args.get_error() != undefined) { 

      var msg = args.get_error().message.replace("Sys.WebForms.PageRequestManagerServerErrorException: ", ""); 

      // Show the custom error. 
      // Here you can be creative and do whatever you want 
      // with the exception (i.e. call a modalpopup and show 
      // a nicer error window). I will simply use 'alert' 
      alert(msg); 

      // Let the framework know that the error is handled, 
      // so it doesn't throw the JavaScript alert. 
      args.set_errorHandled(true); 
     } 
    } 
</script> 

Usted no necesita capte OnAsyncPostBackError incluso a menos que desee personalizar el mensaje. Go to my blog post if you want more information about this.

+0

¡Funcionó! ¡Muy apreciado! –