xVal, DataAnnotations sur toute la classe
-
20-09-2019 - |
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
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 .