Je peux voir votre situation. Je suis à la recherche d'autres solutions de validation concernant les règles de validation complexes qui peuvent s'appliquer à plusieurs propriétés d'un objet modèle donné ou même à plusieurs propriétés d'objets modèles différents dans un graphe d'objets (si vous êtes assez malchanceux pour valider des objets liés comme ça).
La limitation de l'interface IDataErrorInfo
est qu'un objet de modèle satisfait l'état valide simplement lorsqu'aucune des propriétés n'a d'erreur. C'est-à-dire qu'un valide objet est un où toutes ses propriétés sont également valide. Cependant, je peux avoir une situation où si la propriété A, B et C sont valides - alors l'objet entier est valide mais aussi si la propriété A n'est pas valide mais B et C sont, alors l'objet satisfait la validité. Je n'ai tout simplement aucun moyen de décrire cette condition/règle avec les attributs IDataErrorInfo
interface/DataAnnotations
. J'ai trouvé ce delegate approach. Maintenant, beaucoup d'avancées utiles dans MVC n'existaient pas au moment de la rédaction de cet article, mais le concept de base devrait vous aider. Plutôt que d'utiliser des attributs pour définir les conditions de validation d'un objet, nous créons des fonctions déléguées qui valident des exigences plus complexes et, comme elles sont déléguées, nous pouvons les réutiliser. Bien sûr c'est plus de travail, mais l'utilisation des délégués signifie que nous devrions être en mesure d'écrire le code de la règle de validation une fois et stocker toutes les règles de validation dans un endroit (peut-être la couche de service) et (le bit kool) même utiliser le MVC 2 DefaultModelBinder
pour invoquer la validation automatiquement (sans beaucoup de vérification dans nos actions de contrôleur - comme le blog de Scott dit que nous pouvons faire avec DataAnnotations
. Reportez-vous à la last paragraph avant le titre «Strongly Typed UI Helpers»)!Je suis sûr que vous pouvez renforcer l'approche suggérée dans l'article ci-dessus avec des délégués anonymes comme Func<T>
ou Predicate<T>
et écrire des blocs de code personnalisés pour les règles de validation permettra des conditions de propriété croisée (par exemple la condition que vous avez référée à où si votre propriété ShippingSameAsBilling
est vraie, vous pouvez ignorer plus de règles pour l'adresse de livraison, etc).
DataAnnotations
sert à faire des règles de validation simples sur les objets vraiment facile avec très peu de code. Mais au fur et à mesure que vos exigences se développent, vous devrez valider des règles plus complexes. Les nouvelles méthodes virtuelles dans le classeur modèle MVC2 devraient continuer à nous fournir des moyens d'intégrer nos futures inventions de validation dans le cadre MVC.
article très utile. l'aperçu ASP.NET MVC 2 1 utilise des notifications de données dans DefaultModelBinder. cependant, il ne répond pas spécifiquement à ma question, mais merci de l'avoir posté –