web-dev-qa-db-fra.com

Validation conditionnelle à l'aide de la validation Fluent

Ce dont j'ai besoin, c'est d'un moyen de valider conditionnellement les champs selon que d'autres champs sont remplis.

Ex. J'ai une liste déroulante et un champ de date qui sont liés. Si aucun des champs n'est défini, le formulaire doit réussir la validation. Cependant, si l'un des deux champs est défini mais que l'autre ne l'est pas, la validation doit se déclencher, ce qui nécessite que l'autre champ soit défini.

J'ai écrit des classes de validation personnalisées mais il semble qu'il soit validé sur des champs uniques. Existe-t-il un moyen de configurer la validation dont j'ai besoin en utilisant les validateurs intégrés? Sinon, existe-t-il un bon moyen de connecter deux champs à l'aide d'un validateur personnalisé?

63
The Sheek Geek

La validation courante prend en charge la validation conditionnelle, utilisez simplement la clause When pour vérifier la valeur du champ secondaire:

https://fluentvalidation.net/start#conditions

Spécification d'une condition avec When/Unless Les méthodes When et Unless peuvent être utilisées pour spécifier des conditions qui contrôlent le moment où la règle doit s'exécuter. Par exemple, cette règle sur la propriété CustomerDiscount ne s'exécutera que lorsque IsPreferredCustomer est vrai:

RuleFor (customer => customer.CustomerDiscount) .GreaterThan (0) .When (customer => customer.IsPreferredCustomer); `

La méthode Sauf est tout simplement l'opposé de Quand.

Vous pouvez également être en mesure d'utiliser l'opération .SetValidator pour définir un validateur personnalisé qui fonctionne sur la condition NotEmpty.

RuleFor (customer => customer.CustomerDiscount) .GreaterThan (0) .SetValidator (New MyCustomerDiscountValidator)

95
Denis Pitcher