【问题标题】:MVC5 comparing two nullable dates with fluent validationMVC5 比较两个可以为空的日期和流畅的验证
【发布时间】:2015-06-23 17:24:49
【问题描述】:

如何在流利的验证中编写规则来检查两个可以为空的日期,因为开始日期需要早于结束日期。

我的思路是这样的

RuleFor(c => c.StartDate)
            .NotEmpty()

如果开始日期不为空且结束日期不为空,则比较

【问题讨论】:

    标签: asp.net-mvc fluentvalidation


    【解决方案1】:

    类似的东西-

    RuleFor(ac => ac.StartDate)
         .NotEmpty().WithMessage("*Required")
    
     RuleFor(ac => ac.EndDate)
         .NotEmpty().WithMessage("*Required")
         .GreaterThan(r => r.StartDate);
    

    注意-

    数据类型必须相同才能进行比较。

    或者更方便的是source-

     RuleFor(m => m.StartDate)
                .NotEmpty()
                .WithMessage("Start Date is Required");
    
            RuleFor(m => m.EndDate)
                .NotEmpty().WithMessage("End date is required")
                .GreaterThan(m => m.StartDate.Value)
                                .WithMessage("End date must after Start date")
                .When(m => m.StartDate.HasValue);
    

    【讨论】:

    • 谢谢马诺兹。完美答案!
    • 错误:DateTime does not contain a definition for 'Value' -- .Value 属性不能用于任何日期时间字段。这显然已在 MVC5 和最新的 Fluent Validation 中被贬低。
    • 刚刚确认 HasValue 对于 DateTime 也不存在,至少对于 MVC5 和最新的 Fluent Validation。
    • @RenéKåbis,如果您的 DateTime 不可为空,那么您是对的。注意 - 在上述情况下,我假设这是可以为空的。或者,如果 ValueHasValue 不可为空,您也可以顺利进行。
    • 所以,如果我在结束日期上出现错误,结束日期必须大于开始日期,我会在屏幕上显示它。然后我更改开始日期,使结束日期不再更大,仍然不会出现错误,因为我没有更改结束日期。如何处理?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-11
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多