2008-09-06 9 views
2

ValidateEvents est une excellente fonction ASP.net, mais l'écran jaune de la mort n'est pas si gentil. J'ai trouvé un moyen de gérer correctement le HttpRequestValidationException here, mais cela ne fonctionne pas correctement avec ASP.net AJAX. Fondamentalement, j'ai obtenu un UpdatePanel avec un TextBox et un bouton, et lorsque l'utilisateur tape en HTML dans le TextBox, un popup JavaScript avec un message d'erreur disant de ne pas modifier la réponse apparaît.Gérer HttpRequestValidationException gracieusement et compatible ASP.net AJAX?

Donc je me demande quelle est la meilleure façon de gérer HttpRequestValidationException gracieusement? Pour les requêtes "normales" je voudrais juste afficher un message d'erreur, mais quand c'est une requête AJAX je voudrais rejeter la demande et retourner quelque chose pour indiquer une erreur, afin que ma page d'accueil puisse y réagir?

Répondre

2

Trouvé et blogged about it. Fondamentalement, le EndRequestHandler et le 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> 
0

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.

0

C'est ce que je voudrais éviter si possible, mais cela semble être beaucoup plus compliqué que prévu.

Normalement, tout le monde conseille d'utiliser AsyncPostBackError de ScriptManager, mais cela ne fonctionne pas si on l'appelle sur Global.asax. Malheureusement, comme l'exception HttpRequestValidationException est émise par le moteur d'exécution, elle n'entre jamais dans mon code et je ne peux pas faire grand-chose dans l'erreur Application_Error. Donc oui, il faut vraiment le faire en JavaScript, j'espère juste qu'il y a un moyen d'ajouter un "hook" comme la fonction BeginRequestHandler pour ne pas avoir à "pirater" le code Microsoft. Si je trouve une solution avant quelqu'un d'autre, je vais le mettre ici :-)