2011-05-10 10 views
6

error que han permitido a los errores personalizados en mi archivo web.config:manejo en UpdatePanel con el modo <CustomErrors = "on" />

<customErrors mode="On" defaultRedirect="~/ErrorPage.aspx" /> 

Cuando ocurre un error durante una devolución de datos asincrónica en un UpdatePanel, la respuesta regresa como un código 200 y el contenido configurado como la página de error.

Esto rompe cuando el UpdatePanel intenta analizar la respuesta y lanza una excepción de JavaScript:

Sys.WebForms.PageRequestManagerParserErrorException: mensaje recibido desde el servidor no se pudo analizar.

¿Hay una manera de manejar esto correctamente en el lado del cliente sin tener que deshabilitar el error personalizado, ya que no deseo divulgar ningún detalle de excepción?

Respuesta

4

Una manera de manejar esto sería que cablear el evento OnAsyncPostBackError de su mando a ScriptManager:

<asp:ScriptManager ID="ScriptManager1" runat="server" 
    AllowCustomErrorsRedirect="False" 
    OnAsyncPostBackError="ScriptManager1_AsyncPostBackError" /> 

Este page on MSDN tiene un ejemplo completo utilizando este método para controlar los errores de devolución de datos asincrónicos.

EDITAR
para moverse por la cuestión con las páginas de error personalizadas asegúrese de establecer la propiedad AllowCustomErrorsRedirect en el ScriptManager a false. Una vez que configuré esta propiedad en falso, pude hacer que la muestra de MSDN funcionara correctamente aunque tenía CustomErrors mode = "On" establecido en web.config.

+0

Si ya estoy haciendo algo similar, este enfoque se basa en 'if (... args.get_error(). HttpStatusCode == '500')' que no funciona cuando los errores personalizados están habilitados, ya que siempre devuelve un código 200. ¿Me estoy perdiendo algo más? –

+0

@Xavier, OK, creo que lo tengo ahora. Por favor, avíseme si eso funciona para usted. – rsbarro

+0

Además, una cosa a tener en cuenta acerca de este enfoque es que devuelve una respuesta de 200 (comprobado con Fiddler), pero en el texto de respuesta (al menos para el ejemplo de MSDN) verá "46 | error | 500 | El valor lo hace no caer dentro del rango esperado. | ", que indica el error 500. – rsbarro

Cuestiones relacionadas