Domanda

ValidateEvents è un'ottima funzione ASP.net, ma Yellow Screen of Death non è così carino.Ho trovato un modo per gestire con garbo HttpRequestValidationException Qui, ma non funziona correttamente con ASP.net AJAX.

Fondamentalmente, ho un UpdatePanel con una casella di testo e un pulsante e quando l'utente digita HTML nella casella di testo, viene visualizzato un popup JavaScript con un messaggio di errore che dice di non modificare la risposta.

Quindi mi chiedo qual è il modo migliore per gestire con garbo HttpRequestValidationException?Per le richieste "normali" vorrei semplicemente visualizzare un messaggio di errore, ma quando si tratta di una richiesta AJAX vorrei buttare via la richiesta e restituire qualcosa per indicare un errore, in modo che la mia pagina frontend possa reagire?

È stato utile?

Soluzione

Trovato e bloggato a riguardo.Fondamentalmente, EndRequestHandler e args.set_errorHandled sono nostri amici qui.

<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>

Altri suggerimenti

hmmmm, sembra che dovresti trovare una sorta di JavaScript per verificare l'input html o un validatore lato client.

Questo è quello che vorrei evitare se possibile, ma sembra essere molto più complicato del previsto.

Normalmente tutti consigliano di utilizzare l'AsyncPostBackError dello ScriptManager, ma questo non funziona se richiamato sul Global.asax.Sfortunatamente, poiché HttpRequestValidationException viene emessa dal runtime, non entra mai nel mio codice e non posso fare molto all'interno di Application_Error.

Quindi sì, deve essere effettivamente fatto in JavaScript, spero solo che ci sia un modo per aggiungere un "hook" come la funzione BeginRequestHandler in modo da non dover "hackerare" il codice Microsoft.Se trovo una soluzione prima di qualcun altro, la pubblicherò qui :-)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top