2011-08-25 53 views
0

如何驗證值爲0的選擇列表?選擇列表值的FluentValidation

我曾嘗試以下

RuleFor(x => x.ProductId).Equal(0).WithMessage(required); 
RuleFor(x => x.ProductId).NotEqual(0).WithMessage(required); 
RuleFor(x => x.ProductId).GreaterThan(0).WithMessage(required); 
RuleFor(x => x.ProductId).GreaterThan(0).When(x => x.ProductId < 1).WithMessage(required); 
//etc. 

我的選擇列表中有一個「0」值「選擇...」。如果我在表單中選擇該值,ModelState.IsValid會拋出一個錯誤('not expected range'),或者如果我註釋掉ModelState.IsValid,則會將值0發佈到db。無論哪種方式沒有驗證發生。我的所有其他字段是字符串,int和布爾值的混合,可以正常工作並正確驗證。

注意:ProductId是我的模型和視圖模型中的一個int。

丟失..

回答

1

我解決了這個問題。這是我從未問過的問題。解決方案是一個喜劇的錯誤,但我仍然會分享我沿途發現的東西。

簡短的回答是:

RuleFor(x => x.ProductId).GreaterThan(0).WithMessage(required); 

的問題是在我的控制器和(尷尬足夠了)我的看法。

  1. 我忘了爲ProductId添加我的validationmessage。但是這並沒有完全解決問題。
  2. 我的控制器看起來像這樣。

[HttpPost] 
public ActionResult Update(ProductModel model) 
{ 
    if(!ModelState.IsValid) 
     throw new ArgumentExpection(); 
//etc. 
} 

我本來是在試探我的模型與Automapper工作,一旦我實現驗證我忘了取出的ArgumentException。

這樣做是從來沒有給我的驗證規則的一天。當然,它從來沒有驗證,因爲控制器被告知關於ModelState拋出一個錯誤,而不是回發ACTUAL驗證錯誤。 Dohhh!

[HttpPost] 
public ActionResult Update(ProductModel model) 
{ 
    if(!ModelState.IsValid) 
    return View(model);//pssst! the validation error is in here. 
//etc. 
} 

我現在對事物的順序有了更好的理解。希望這可以幫助別人跟我一樣愚蠢。