Question

J'ai une validation complète sur un obeject et essaie de trouver la meilleure façon de le gérer.

Compte tenu de la classe suivante:

public class LetterResponse {
 public Guid Id {get;set;}
 public bool SendBlankCart {get;set;}
 public string ToName {get;set;}
 public string ToAddress {get;set;}
}

Je veux utiliser un dataannotation et xval afin de valider la classe avant que je persévère, mais je validation complexe qui nécessite plus d'une propriété.

Pseudo:

if SendBlankCart {
 - no validation on ToName, ToAddress 
} else {
 ToName - required.
 ToAddress - required. 
}

Je voudrais annoter comme ceci:

[LetterResponseValidator]
public class LetterResponse {
 public Guid Id {get;set;}
 public bool SendBlankCart {get;set;}
 public string ToName {get;set;}
 public string ToAddress {get;set;}
}

et une règle de validation comme ceci:

public class LetterResponseValidator : ValidationAttribute
    {
        public override bool IsValid(object value)
        {
            if (value.GetType() == typeof(LetterResponse))
            {
                var letterResponse = (letterResponse) value;
                if (letterResponse.SendBlankCard)
                {
                    return true;
                } else
                {
                    if (string.IsNullOrEmpty(letterResponse.FromDisplayName) || string.IsNullOrEmpty(letterResponse.ToAddress1))
                    {
                        return false;
                    }
                    return true;
                }

            }
            return false;
        }
    }

J'attends le paramètre à mon instance de la classe LetterResponse, mais il ne sera jamais appelé sur mon coureur de validation?

Quelqu'un sait-il un moyen de gérer cela?

Merci,

Hal

Était-ce utile?

La solution

Je ne pense pas que cela ait à voir avec le fait que vous avez un validateur niveau de la classe. Pour exclure toute connexion, essayez d'appliquer un mannequin validateur nécessaire pour « -Nom » et voir si le validateur est appelé ou non.

Si on l'appelle, alors laissez-moi savoir, si ce n'est pas, alors vous devriez vérifier si vous avez votre overriden ModelBinder standard avec le DataAnnotationsModelBinder dans votre fichier Global.asax.cs:

ModelBinders.Binders.DefaultBinder = new DataAnnotationsModelBinder();

Pour plus de détails sur ce projet et de démonstration entièrement fonctionnel, lire article de blog sur la validation côté client .

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