Question

ValidateEvents est une excellente fonction ASP.net, mais l'écran jaune de la mort n'est pas si agréable.J'ai trouvé un moyen de gérer gracieusement l'exception HttpRequestValidationException. ici, mais cela ne fonctionne pas correctement avec ASP.net AJAX.

Fondamentalement, j'ai un UpdatePanel avec une TextBox et un Button, et lorsque l'utilisateur tape du HTML dans la Textbox, une fenêtre contextuelle JavaScript avec un message d'erreur indiquant de ne pas modifier la réponse apparaît.

Je me demande donc quelle est la meilleure façon de gérer HttpRequestValidationException avec élégance ?Pour les requêtes "normales", je voudrais simplement afficher un message d'erreur, mais lorsqu'il s'agit d'une requête AJAX, j'aimerais jeter la requête et renvoyer quelque chose pour indiquer une erreur, afin que ma page frontend puisse y réagir ?

Était-ce utile?

La solution

Je l'ai trouvé et j'ai blogué à ce sujet.Fondamentalement, EndRequestHandler et args.set_errorHandled sont nos amis ici.

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

Autres conseils

hmmmm, il semble que vous auriez besoin de trouver une sorte de JavaScript pour vérifier l'entrée HTML ou un validateur côté client.

C'est ce que j'aimerais éviter si possible, mais cela semble bien plus compliqué que prévu.

Normalement, tout le monde conseille d'utiliser l'AsyncPostBackError du ScriptManager, mais cela ne fonctionne pas s'il est appelé sur le Global.asax.Malheureusement, comme l'exception HttpRequestValidationException est émise par le runtime, elle n'entre jamais dans mon code et je ne peux pas faire grand-chose dans Application_Error.

Alors oui, cela doit effectivement être fait dans JavaScript, j'espère juste qu'il existe un moyen d'ajouter un "hook" comme la fonction BeginRequestHandler afin que je n'aie pas à "pirater" le code Microsoft.Si je trouve une solution avant quelqu'un d'autre, je la mettrai ici :-)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top