Comment faire pour forcer MVC pour Valider Ivalidatableobjet
Il semble que, lorsque MVC valide un Modèle qui traverse le DataAnnotation attributs (comme requis, ou la plage) d'abord, et si l'un de ceux qui échouent, il saute de l'exécution de la validation de la méthode sur mon Ivalidatableobjet modèle.
Est-il un moyen d'avoir MVC aller de l'avant et exécuter cette méthode même si la validation échoue?
Honnêtement, je commence à aimer ce comportement par défaut. Si vous faites des Affaires au niveau de la validation de votre méthode de validation qui implique quelque chose de cher comme des connexions de base de données, puis de son mieux pour PAS appel à eux à moins que le modèle est valide.
OriginalL'auteur Mr Bell | 2011-06-21
Vous devez vous connecter pour publier un commentaire.
Vous pouvez manuellement appel Valider() en passant par une nouvelle instance de ValidationContext, comme suit:
Un inconvénient de cette approche est que dans les cas où il n'y a pas de niveau de la propriété (DataAnnotation) les erreurs, la validation sera exécuté deux fois. Pour éviter cela, vous pouvez ajouter une propriété à votre modèle booléen Validé, ce qui vous défini à true dans votre Validate() la méthode une fois qu'il s'exécute, puis vérifier manuellement avant d'appeler la méthode dans votre contrôleur.
Dans votre contrôleur:
Et dans votre modèle:
OriginalL'auteur gram
Il y a un moyen de le faire sans nécessiter de code réutilisable au sommet de chaque action du contrôleur.
Vous aurez besoin de remplacer le modèle par défaut liant avec l'un de vos propres:
Votre modèle de classeur fournisseur ressemble à ceci:
Maintenant créer un modèle personnalisé classeur qui en fait les forces de la validation. C'est là que le gros du travail est fait:
Vous aurez besoin d'un IndexOf de la méthode d'extension, trop. C'est un bas prix de la mise en œuvre, mais il va travailler:
Je pense que cette solution ne fonctionne que pour les DefaultModelBinder
OriginalL'auteur uglybugger