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.
Réponses
Trop de publicités?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 .
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 .