【问题标题】:Validate several properties with conditions used FluentValidation使用使用的条件验证多个属性 FluentValidation
【发布时间】:2013-05-16 07:59:59
【问题描述】:

我有 DateTime? 属性的课程。一般来说,它们是一对(请求/接收)日期。我在我的项目中使用了FluentValidation。我可以编写将接收两个DateTime? 参数的验证器吗? 条件:

  1. 请求必须小于或等于接收
  2. Request 为 null 时无法设置接收

以后可能会有更多条件。

【问题讨论】:

    标签: asp.net-mvc-3 validation fluentvalidation


    【解决方案1】:

    您不能使用 LessThanOrEqualTo 扩展方法,因为它不适用于可为空的日期时间。

    还有一点不清楚,但我可能猜到:如果Receive 为空,Request 可以有任何值(甚至为空),对吧?

    你可以做这样的事情(我使用了一个类 Item,与你的属性相同),一步管理你的两个规则:

    public ItemValidator()
            {
                RuleFor(m => m.Request)
                    .Must((x, y) => CheckRequestAndReceive(x));
            }
    
            private static bool CheckRequestAndReceive(Item item)
            {
                //Reveive can't be set when Request is null
                if (item.Request == null)
                    return item.Receive == null;
    
                //Request can be anything if Receive is null
                if (item.Receive == null)
                    return true;
    
                //Request must be less or equal to Receive   
                return item.Receive.Value >= item.Request.Value;
            }
    

    测试:

    var item = new Item
        {
           Receive = DateTime.Now
         };
    var errors = new ItemValidator().Validate(item);// => ERROR
    
    var item2 = new Item()
        {
           Request = DateTime.Now
        };
    errors = new ItemValidator().Validate(item2); //=> OK
    
    var dt = DateTime.Now;
    var item3 = new Item
        {
           Receive = dt,
           Request = dt
        };
    errors = new ItemValidator().Validate(item3); //=> OK
    
    var item4 = new Item
        {
            Receive = DateTime.Now,
            Request = DateTime.Now.AddDays(1)
        };
    errors = new ItemValidator().Validate(item4); //=> ERROR
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-03
      • 2021-07-13
      • 2014-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多