2017-03-31 3 views
0

を支配する - それは常に値(非条件付き)を持っている必要があります私は郵便番号、 を検証する必要が

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

それは米国でなら、値が正規表現と一致する必要があります(条件付き)

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

私の目標は、1つのルール で一般的なルールと米国のルールを組み合わせることで、私が試してみました:

// 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"); 

これを1つのルールでどのように書くことができますか?

+0

どのデータ型がZipですか?文字列? ValidatorOptions.CascadeModeには何が設定されていますか? – Stout01

+0

Zipは文字列、CascadeModeは続行です。 – user2822208

+0

IsUnitedStatesメソッドを投稿できますか? – Stout01

答えて

-1

1つのルールでは実行できません。 FluentValidationはそのケースをサポートするようには設計されていません。

+0

実際には1つのルールで実行できます。この回答を確認してください:http://stackoverflow.com/a/24026758/5656858 – Stout01

+0

あなたのリンクや他の投稿のすべての回答をテストした後、私は結論に達しませんでした。 – user2822208