¿Maneja HttpRequestValidationException con elegancia y es compatible con ASP.net AJAX?

StackOverflow https://stackoverflow.com/questions/47864

Pregunta

ValidateEvents es una excelente función de ASP.net, pero la pantalla amarilla de la muerte no es tan agradable.Encontré una manera de manejar HttpRequestValidationException con gracia aquí, pero eso no funciona correctamente con ASP.net AJAX.

Básicamente, obtuve un UpdatePanel con un cuadro de texto y un botón, y cuando el usuario escribe HTML en el cuadro de texto, aparece una ventana emergente de JavaScript con un mensaje de error que dice no modificar la respuesta.

Entonces me pregunto cuál es la mejor manera de manejar HttpRequestValidationException con gracia.Para solicitudes "normales", me gustaría simplemente mostrar un mensaje de error, pero cuando se trata de una solicitud AJAX, me gustaría descartar la solicitud y devolver algo que indique un error, para que mi página de inicio pueda reaccionar.

¿Fue útil?

Solución

Lo encontré y blogueó sobre esto.Básicamente, EndRequestHandler y args.set_errorHandled son nuestros amigos aquí.

<script type="text/javascript" language="javascript">
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(EndRequestHandler);

function EndRequestHandler(sender, args) {
    if (args.get_error() != undefined)
    {
        var errorMessage;
        if (args.get_response().get_statusCode() == '200')
        {
            errorMessage = args.get_error().message;
        }
        else
        {
            // Error occurred somewhere other than the server page.
            errorMessage = 'An unspecified error occurred. ';
        }
        args.set_errorHandled(true);
        $get('<%= this.newsletterLabel.ClientID %>').innerHTML = errorMessage;
    }
}
</script>

Otros consejos

hmmmm, parece que necesitarías encontrar algún tipo de JavaScript para verificar la entrada html o un validador del lado del cliente.

Eso es lo que me gustaría evitar si es posible, pero parece mucho más complicado de lo esperado.

Normalmente, todo el mundo recomienda utilizar AsyncPostBackError del ScriptManager, pero esto no funciona si se llama en Global.asax.Desafortunadamente, como el tiempo de ejecución emite HttpRequestValidationException, nunca ingresa mi código y no puedo hacer mucho dentro de Application_Error.

Entonces, sí, es necesario hacerlo en JavaScript, solo espero que haya una manera de agregar un "gancho" como la función BeginRequestHandler para no tener que "piratear" el código de Microsoft.Si encuentro una solución antes que nadie, la publicaré aquí :-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top