2017-03-31 102 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)); 

我的目標是一般規則和美國規則中的一個規則 結合起來,我曾嘗試:

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

我怎麼可以用一條規則寫這個?

+0

什麼樣的數據類型是Zip?一個字符串? 你有什麼ValidatorOptions.CascadeMode設置爲? – Stout01

+0

Zip是字符串,CascadeMode是Continue。 – user2822208

+0

你能發佈你的IsUnitedStates方法嗎? – Stout01

回答

-1

這是不可能的在一條規則。 FluentValidation不是爲了支持這種情況而設計的。

+0

實際上可以用一條規則來做。檢查這個答案在這裏:http://stackoverflow.com/a/24026758/5656858 – Stout01

+0

在測試您的鏈接和其他帖子的所有答案後,我得出結論,這是不可能的。 – user2822208