如何让kendo datepicker对最短日期进行日期验证?

时间:2014-01-10 19:50:23

标签: validation kendo-ui kendo-asp.net-mvc kendo-datepicker

我有以下控件:

@(Html.Kendo().DatePickerFor(model => model.Attributes.DueDate)
    .HtmlAttributes(new { 
        ID = "idSurvey_DueDate", 
        @data_bind = "value: DueDate", 
        @Class = "report-label datepicker surveyAttributesData", 
        TabIndex = 3 })
    .Min(DateTime.Now)                                                            
)

以下jquery:

$("#idSurvey_DueDate").kendoValidator({
    rules: {
        dateValidation: function (e) {
            var currentDate = kendo.parseDate($(e).val());
            // Check if date parse was successful
            if (!currentDate) {
                return false;
            }
            return true;
        }
    },
    messages: {
        dateValidation: "Invalid Date!",
        min: "Date must not be in the past!"
    }
});

当我对此进行测试并输入无效日期时,我得到的消息不是我所期望的。相反,它是“字段DueDate必须是日期”。这个神秘信息来自哪里,为什么不使用我在验证器中放置的消息属性?我想要的是不允许无效的日期格式以及日期不是过去。因此必须执行最低限度。

3 个答案:

答案 0 :(得分:7)

此代码似乎工作正常:

$("form").kendoValidator({
  rules: {
    dateValidation: function(element) {
      var value = $(element).val();

      var date = kendo.parseDate(value);
      if (!date) {
        return false;
      }

      return true;
    },
    minDate: function(element) {
      var value = $(element).val();

      var date = kendo.parseDate(value);

      var result = date >= new Date();

      return result;
    }
  },
  messages: {
    dateValidation: "You must enter a date",
    minDate: "The date must not be in the past"
  }
});

这是一个现场演示:http://jsbin.com/EvoroRe/1/edit

答案 1 :(得分:0)

我建议添加mvcdate规则:

rules: {
    mvcdate: function (input) {
        var datarole = $(input).data('role');
        if (datarole === 'datepicker') {
            var value = $(input).val();
            if (value) {
                var date = kendo.parseDate(value, 'ddd, MMM d');
                if (!date) {
                    return false;
                }
            }
        }

        return true;
    }
},
messages: {
    mvcdate: function (intput) {
        return intput.attr('data-val-date');
    }
}

不幸dateValidation规则的优先级低于datemvcdate,因为它们是默认值,也不是自定义规则。据我所知,mvcdate规则具有最高优先级,因为:

    已经针对特定控件跳过了
  • dateValidation规则,我收到了“必须是日期”错误
  • date规则已通过TRUE结果但我仍然得到'必须是日期'错误
  • mvcdate规则帮助了我。

您始终可以在控制台中查看kendoValidator:

kendoValidator debugger

答案 2 :(得分:0)

我不确定自从接受答案以来,kendo验证程序是否已更改,但是您将要过滤掉,仅将日期验证应用于datepicker输入。否则,文本框或其他输入将生成有关无效日期的错误消息。规则应类似于

$("#modForm").kendoValidator({
    rules: {
        dateValidation: function (input) {
            if (input.is('[data-role="datepicker"]')) {
                var value = $(input).val();

                var date = kendo.parseDate(value);
                if (!date) {
                    return false;
                }
            }
            return true;
        }
    },
    messages: {
        dateValidation: "You must enter a date",
    }
});