Comment puis-je utiliser un ValidationAttribute personnalisé pour assurer deux propriétés correspondent?

StackOverflow https://stackoverflow.com/questions/2595715

Question

Nous utilisons xVal et le DataAnnotationsValidationRunner standard décrit ici pour recueillir des erreurs de validation de nos objets de domaine et des modèles d'affichage dans ASP.NET MVC. Je voudrais avoir un moyen d'avoir cette validation RUNNER identifier lorsque deux propriétés ne correspondent pas à l'aide de DataAnnotations personnalisés.

En ce moment je suis obligé de le 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: cela peut être fait en utilisant la propriété attributs au niveau de la validation, ou suis-je forcé en utilisant les attributs de niveau de classe (dans ce cas, je dois modifier le coureur ... et mon suivi en question poseriez être la meilleure façon de les récupérer dans ce cas).

Merci!

Mise à jour: J'ai finalement compris comment écrire la requête d'objet pour mettre en œuvre la suggestion contenue dans la réponse choisie; 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 je changé le TypeId ê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);
Était-ce utile?

La solution

voir Écrire un attribut CompareTo DataAnnotation

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top