【问题标题】:Can FluentValidation can do checkboxes?FluentValidation 可以做复选框吗?
【发布时间】:2011-11-10 17:52:00
【问题描述】:

我正在使用 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,但这是使用服务器端验证,而不是客户端。

【问题讨论】:

    标签: asp.net-mvc fluentvalidation


    【解决方案1】:

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

    更新: 最终目标是拥有一个复选框,该复选框仅在选中第二个复选框时才有效。即

    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 有条件地验证复选框,这就是你的做法!

    【讨论】:

    • 你的挫败感为我节省了一些。谢谢!
    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

       RuleFor(x => x.fullname_required).Must(x => x.Equals(true)).WithMessage("Full Name is Required");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-21
        • 1970-01-01
        • 2020-09-10
        • 2015-06-21
        • 1970-01-01
        • 2010-09-14
        • 1970-01-01
        • 2018-10-01
        相关资源
        最近更新 更多