5 votes

Comment gérer la validation conditionnelle dans MVC3 ?

Je suis en train d'apprendre MVC et je n'arrive pas à comprendre comment gérer le scénario suivant : j'ai un formulaire avec une adresse de livraison et une adresse de facturation. Tous les champs sont obligatoires. Il y a aussi une case à cocher pour "L'adresse de facturation est la même que l'adresse de livraison". Mon problème est que l'état du modèle n'est jamais valide si les deux adresses ne sont pas renseignées. Je pourrais gérer cela assez facilement avec du javascript qui ajouterait simplement les valeurs de l'adresse de livraison aux champs de l'adresse de facturation, mais s'il y a une meilleure façon de gérer cela, j'aimerais le savoir. Si vous avez des indications sur la façon dont ce problème est généralement traité, je vous en remercie. Merci de votre compréhension.

4voto

Merlyn Morgan-Graham Points 31815

Pour ce faire, vous pouvez créer un attribut de validation personnalisé :

http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

L'essentiel est de créer une nouvelle classe basé sur ValidationAttribute , IClientValidatable Vous pouvez alors surcharger et mettre en œuvre si nécessaire, ajouter votre validation côté client (dont vous avez besoin de toute façon) et appliquer l'attribut à votre champ facultatif.

Ou, puisque la validation peut être aussi complexe que vous le souhaitez, appliquez-la à un champ partagé, en partie facultatif et en partie obligatoire.

Ce type a également une version alpha d'une bibliothèque qu'il est en train d'écrire pour rendre la validation MVC plus flexible. Je ne l'ai pas utilisée moi-même, mais vous pouvez essayer .

4voto

Erik Funkenbusch Points 53436

Il existe de nombreuses façons de traiter ce problème. Si vous n'utilisez pas la validation côté client, vous pouvez simplement implémenter IValidatableObject sur le modèle, surcharger la méthode IsValid() et faire un peu de code pour vérifier la validité du modèle.

Si vous utilisez la validation côté client, vous avez besoin d'un attribut personnalisé ou d'utiliser quelque chose comme validation fluide .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X