FluentValidation pour Quand & doit?
Je suis en train d'utiliser FluentValidation validaton quand dropdownlist valeur est yes
et le champ doit être la date. il fonctionne lorsque dropdownlist est yes
la vérification de date
. Mais
montrant également la validation lorsque je sélectionne No
encore il dit Must be date
.
Il ne faut pas valider plus si dropdownlist valeur otherthan la yes
. Comment pouvons-nous faire?
RuleFor(x => x.DtPublishedTimeText)
.NotEmpty()
.When(HasMaterialPublishedElseWhereText)
.WithMessage("Required Field")
.Must(BeAValidDate)
.WithMessage("Must be date");
private bool BeAValidDate(string val)
{
DateTime date;
return DateTime.TryParse(val, out date);
}
private bool HasMaterialPublishedElseWhereText(MeetingAbstract model)
{
return model.HasMaterialPublishedElseWhereText != null &&
model.HasMaterialPublishedElseWhereText.Equals("yes");
}
OriginalL'auteur James123 | 2014-06-03
Vous devez vous connecter pour publier un commentaire.
Le problème que vous rencontrez est la
When
prédicat ne s'applique qu'à une seule règle. Vous avez besoin d'avoir conditionnelle de validation sur leNotEmpty
ET laMust
.Il y a deux façons d'y parvenir. L'Option 1 est plus propre quand il ya seulement un couple de règles conditionnelles, sinon je serais utilisation de l'option 2.
Ou
Note: je n'ai aucune idée de ce que
HasMaterialPublishedElseWhereText
est ou à quoi il ressemble. Je suis en supposant que vous pouvez l'utiliser comme un prédicatEDIT:
Je voudrais aussi regarder le refactoring, la
HasMaterialPublishedElseWhereText
méthode, la suite est moins sujette aux erreurs.HasMaterialPublishedElseWhereText
est la liste déroulante. Donc, je suis à la vérification de laHasMaterialPublishedElseWhereText
valeur estyes
etDtPublishedTimeText
n'est pas vide et il devraitdate
Deux de mes suggestions devrait fonctionner. J'ai aussi ajouté une possible refactoriser le
HasMaterialPublishedElseWhereText
méthodeOriginalL'auteur Xenolightning
Il vous suffit de changer l'ordre de vos appels. Essayez ceci:
La
When
s'applique à toutes les règles précédentes. Donc, dans votre code lorsque vous avez appliqué directement après laNotEmpty
, elle ne s'applique qu'à laNotEmpty
de la règle et de ne pas leMust
règle.Démo sur DotNetFiddle.
OriginalL'auteur Dinesh Gurram