2010-04-07 11 views
2

Nous utilisons xVal et le DataAnnotationsValidationRunner standard décrit here pour recueillir des erreurs de validation de nos objets de domaine et des modèles d'affichage dans ASP.NET MVC. Je voudrais trouver un moyen d'identifier ce courtier de validation lorsque deux propriétés ne correspondent pas à l'aide de DataAnnotations personnalisées.Comment puis-je utiliser un ValidationAttribute sur mesure pour assurer deux propriétés correspondent?

En ce moment je suis forcé en faire en dehors du coureur, de cette façon:

if (!(model.FieldOne == model.FieldTwo)) 
    errors.Add(new ErrorInfo("FieldTwo", "FieldOne must match FieldTwo", model.FieldTwo)); 

Ma question est la suivante: cela peut être fait en utilisant les attributs de validation au niveau de la propriété, ou suis-je forcé en utilisant la classe attributs -Level (dans ce cas, je serais amené à modifier le coureur ... et ma question de suivi serait la meilleure façon de les récupérer dans ce cas).

Merci!

MISE À JOUR: J'ai finalement trouvé comment écrire la requête d'objet pour implémenter la suggestion dans la réponse sélectionnée; Je concat les résultats de cette requête avec les résultats du coureur de validation standard, si quelqu'un était curieux. Notez que j'ai changé le TypeId pour être la propriété de champ de confirmation.

var classErrorQuery = 
     from attribute in 
      instance.GetType().GetCustomAttributes(typeof (ValidationAttribute), false).Cast 
      <ValidationAttribute>() 
     where !attribute.IsValid(instance) 
     select new ErrorInfo(attribute.TypeId.ToString(), attribute.FormatErrorMessage(string.Empty), instance); 
+0

double possible [Écrire un attribut CompareTo DataAnnotation] (http://stackoverflow.com/questions/1607832/writing-a-compareto-dataannotation-attribute) – Sheridan

Répondre

1

voir Writing a CompareTo DataAnnotation Attribute

et vous pouvez vérifier les AccountMOdel dans le projet par défaut de MVC2, Il est un attribut PropertiesMustMatchAttribute appliqué à la ChangePasswordModel pour valider que le NewPassword et ConfirmPassword match

+0

+1 pour la référence du projet MVC2, intéressant de voir comment ils l'accomplir. Je suppose qu'il utilise leur runner DataAnnotations intégré cependant. Une idée sur la façon de collecter cette erreur avec une requête d'objet pour xVal? –

+0

@moi_meme merci de me pointer dans la bonne direction; J'ai fini par déterminer la pièce de coureur d'annotation, mais le code de référence a fini par être la dernière pièce que je devais résoudre mon problème. Merci! –