4

我正在使用 FluentValidation 验证 MVC 表单上的输入。

我有一个复选框。

无论我将验证规则设置为什么,它都不会验证复选框。

我知道验证正在工作,因为我有一个下拉列表可以在同一页面上进行验证。

看法

<%: 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); 

这些都不起作用。我要努力做到这一点。这是一个他妈的复选框

PS:我发现线程谈论使用 jQuery,但这是使用服务器端验证,而不是客户端。

4

3 回答 3

4

我从未在复选框的页面上放置ValidationMessageFor属性。它验证得很好,但我看不到它。

更新:最终目标是拥有一个复选框,只有在选中第二个复选框时才会验证该复选框。IE

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

但是,在上面的 facepalm 之后,这仍然不起作用,但是由于 lomaxx,我能够通过将 fullname_required 转换为 bool 来使其工作?

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

如果有人试图在 MVC 中使用 FluentValidation 有条件地验证复选框,这就是你的做法!

于 2011-11-11T09:49:09.357 回答
3

我有一个理论,我可能是错的,但是 bool 是一种值类型,而不是引用类型,所以根据定义它总是有一个值(即真或假)。

因此,当您提交表单时,它会看到“未选中”的值为 false 并假定这是一个有效值。

您可能需要做的是将代码中的 bool 更改为可为空,以便默认值为“null”而不是 false。

于 2011-11-10T18:34:10.230 回答
2

要使用 Fluent 验证来验证您的复选框,您可以在验证时使用检查字段的值。我已经对其进行了测试,它运行良好,没有任何缺陷。

 RuleFor(x => x.fullname_required).Must(x => x.Equals(true)).WithMessage("Full Name is Required");
于 2018-04-17T07:20:33.380 回答