Question

J'utilise AjaxSubmit pour publier un formulaire et des validations côté serveur sont effectuées à l'aide de XVal (méthode RuleException).Je n'utilise pas la méthode try/catch pour ajouter une erreur au modèle, puis l'envoyer pour visualisation.Au lieu de cela, je souhaite utiliser l'attribut HandleError et dans OnException, j'ajoute les erreurs au modèle.Le problème majeur est de savoir comment obtenir ces erreurs lors de l'appel Ajax ?

Était-ce utile?

La solution

Il n’existe pas de solution idéale pour le moment.Faire cela correctement nécessite un framework de validation côté client (car, pour afficher les erreurs, vous devez modifier dynamiquement la page HTML), et jusqu'à récemment, ASP.NET MVC ne disposait pas de cela.Cependant, ASP.NET MVC 2 Preview 2 a introduit la validation côté client, il est donc raisonnable de supposer que quelque chose pourrait bientôt être intégré au framework.

En attendant, HandleErrorAttribute ne vous aidera pas.HandleErrorAttribute sait uniquement comment rediriger vers une page d'erreur, ce qui n'est généralement pas ce que vous souhaitez faire en réponse à une erreur de validation côté serveur, même avec un POST "normal", et certainement pas avec une publication AJAX.

Il y a en réalité deux scénarios différents que vous devez gérer :

  1. Les erreurs de validation ne sont pas des échecs catastrophiques ;ce sont simplement de mauvaises données utilisateur, auxquelles vous devez vous attendre.Il vous suffit de renvoyer les informations sur la page, afin que la page puisse être balisée pour indiquer à l'utilisateur comment corriger ses données.
  2. Vous devez également gérer les pannes catastrophiques, comme les exceptions imprévues.Cela ressemble à ce que fait HandleErrorAttribute, dans la mesure où vous pouvez afficher un message à un utilisateur, mais vous ne pouvez pas nécessairement faire correspondre ce message avec des champs spécifiques de votre page.

Pour gérer le premier scénario d'erreur, vous devez envelopper l'état du modèle dans un objet qui sera analysable dans le code JavaScript ;JSON est la solution évidente ici.Vous devez ensuite disposer d'un code JavaScript côté client qui analyse cet objet et balise les champs du formulaire.C'est plus facile si vous vous connectez à un cadre de validation côté client existant, qui contient déjà du code pour baliser les champs de formulaire.

Pour gérer le deuxième type d'erreur, vous pouvez étendre HandleErrorAttribute afin de fournir du JSON au lieu du HTML en cas de panne catastrophique.Encore une fois, vous devrez écrire du code JavaScript qui sera exécuté en cas d'échec -- le code global de jQuery ajaxError L'événement est utile ici - qui détecte les informations d'erreur structurées que vous avez créées et affiche une sorte de message utile à l'utilisateur.

Si tout cela semble un peu complexe, eh bien, c'est le cas, c'est pourquoi il peut être plus logique d'attendre de voir ce qui sera intégré lorsque MVC 2 sera finalement publié.

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