2015-01-16 112 views
0

我遇到了FluentValidation的Must方法問題。我有這個規則我的視圖模型:FluentValidation自定義驗證問題

RuleFor(v => v.StateCd).Must(stateCd => BeAValidStateCode(stateCd)).WithMessage("Please enter a valid, 2 character state code.") 
              .NotEmpty().WithMessage("State is required.") 
              .Length(2).WithMessage("State should be 2 characters."); 

的驗證方法是在視圖模型:

private bool BeAValidStateCode(string stateCode) 
{ 
    string states = "|AL|AK|AS|AZ|AR|CA|CO|CT|DE|DC|FM|FL|GA|GU|HI|ID|IL|IN|IA|KS|KY|LA|ME|MH|MD|MA|MI|MN|MS|MO|MT|NE|NV|NH|NJ|NM|NY|NC|ND|MP|OH|OK|OR|PW|PA|PR|RI|SC|SD|TN|TX|UT|VT|VI|VA|WA|WV|WI|WY|"; 

    return stateCode.Length == 2 && states.IndexOf("|" + stateCode + "|") >= 0; 
} 

我想確保用戶進入狀態代碼是兩個字符,並且包含在這個字符串。我已經測試了驗證方法並知道它的工作原理,但它驗證了諸如「aa」,「jj」等輸入。我是否正確使用Must規則?

任何幫助表示讚賞。

更新:由於張貼這我已經嘗試過其他一些事情,包括剛纔具有BeAValidStateCode方法返回false,它仍然驗證了什麼,我把

+0

您是否在控制器操作中對ModelState.IsValid執行檢查? –

+0

是的,但我正在嘗試使用它進行客戶端驗證。 – JB06

回答

1

FluentValidation不會做像規則的客戶端驗證Must()而不實現自定義客戶端提供程序。

一般來說,您應該始終進行服務器端驗證,客戶端是一個可喜的選項(因爲用戶始終可以禁用Javascript)。

如果你想建立一個自定義驗證提供者,你可以從this answer或者this blog post得到一些想法。

+0

我明白了,我沒有意識到,雖然現在想着它,但我應該有。謝謝(你的)信息。 – JB06