2011-11-10 58 views
2

我正在使用FluentValidation來驗證MVC表單上的輸入。FluentValidation可以做複選框嗎?

我有一個複選框。

無論我設置了驗證規則,它都不會驗證該複選框。

我知道驗證工作,因爲我有一個下拉列表,在同一頁面上驗證罰款。

查看

<%: Html.CheckBoxFor(m => m.fullname_required) %> 

型號

[Validator(typeof(CreateFormModelValidator))] 
public class CreateFormModel 
{ 
    public int? group_id { get; set; } 

    public IEnumerable<SelectListItem> Groups { get; set; } 

    [DisplayName("Fullname is required")] 
    public bool fullname_required { get; set; } 
} 
public class CreateFormModelValidator : AbstractValidator<CreateFormModel> 
{ 
    public CreateFormModelValidator() 
    { 
     RuleFor(x => x.group_id).NotEmpty().NotNull().WithMessage("Please select a group!"); 
     RuleFor(x => x.fullname_required).NotNull();   
    } 
} 

我已經試過

RuleFor(x => x.fullname_required).NotEmpty(); 
RuleFor(x => x.fullname_required).NotNull(); 
RuleFor(x => x.fullname_required).NotEqual(false); 

其中沒有工作。我正在嘗試做這項工作的香蕉。這是一個F *** ING集團複選框

PS:我發現線程談論使用jQuery代替,但是這是使用服務器端驗證,而不是客戶端。

回答

4

我從來沒有在複選框的頁面上放置ValidationMessageFor屬性。這證明是好的,但我看不到它。

UPDATE: 最終的目標是有一個複選框,如果第二複選框被選中這是唯一的驗證。即

RuleFor(x => x.fullname_show).NotEmpty().When(x => x.fullname_required == true); 

然而,這仍然不會高於捂臉後工作,但由於lomaxx我能得到它的工作通過轉換fullname_required爲bool?

RuleFor(x => x.fullname_show).NotEmpty().When(x => ((bool?)x.fullname_required) != false); 

如果有人試圖有條件地使用MVC中的FluentValidation驗證複選框,那就是您的操作方法!

+0

你的失望給我留了一些。謝謝! – MrBoJangles

3

我有一個理論,我可能是錯的,但布爾是值類型,不是引用類型,因此按照定義它總是有一個值(即真或假)。

因此,當你提交表單,它認爲它有一個false值,「未登記」,並假定這是一個有效的值。

你可能需要做的是改變布爾在你的代碼爲空的,這樣的默認值是「零」,而不是假的。

相關問題