2017-03-31 1 views
0

je dois valider code, - il doit toujours avoir une valeur (non conditionnelle)conditionnelle et non conditionnelle dans une Fluent règle de validation

// General Rule: 
RuleFor(m => m.Zip).NotEmpty() 
    .WithMessage("Zip code is required."); 

Si c'est aux États-Unis, la valeur doit correspondre regex (conditionnel)

// United States Rule: 
RuleFor(m => m.Zip) 
    .Matches(ZipCodeRegEx) 
    .WithMessage("Invalid Zip Code") 
    .When(m => IsUnitedStates(m.CountryCode)); 

Mon but est de combiner la règle générale et aux États-Unis dans la règle une règle , j'ai essayé:

// doesn't check general rule for non-us 
RuleFor(m => m.Zip) 
    .NotEmpty() 
     .WithMessage("Zip code is required.") 
    .Matches(ZipCodeRegEx) 
     .When(m => IsUnitedStates(m.CountryCode)) 
     .WithMessage("Invalid Zip Code"); 

// doesn't check general rule for non-us 
RuleFor(m => m.Zip) 
    .NotEmpty() 
     .When(m => true)// always 
     .WithMessage("Zip code is required.") 
    .Matches(ZipCodeRegEx) 
     .When(m => IsUnitedStates(m.CountryCode)) 
     .WithMessage("Invalid Zip Code"); 

Comment puis-je écrire cela en une seule règle?

+0

Quel type de données est Zip? un string? Sur quoi avez-vous défini ValidatorOptions.CascadeMode? – Stout01

+0

Zip est une chaîne, CascadeMode est Continue. – user2822208

+0

Pouvez-vous poster votre méthode IsUnitedStates? – Stout01

Répondre

-1

Il n'est pas possible de le faire en une seule règle. FluentValidation n'a pas été conçu pour prendre en charge ce cas.

+0

En fait, il est possible de le faire en une seule règle. Vérifiez cette réponse ici: http://stackoverflow.com/a/24026758/5656858 – Stout01

+0

après avoir testé toutes les réponses dans votre lien et d'autres messages, je suis arrivé à la conclusion que ce n'est pas possible. – user2822208