我有以下控件:
@(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必须是日期”。这个神秘信息来自哪里,为什么不使用我在验证器中放置的消息属性?我想要的是不允许无效的日期格式以及日期不是过去。因此必须执行最低限度。
答案 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
规则的优先级低于date
和mvcdate
,因为它们是默认值,也不是自定义规则。据我所知,mvcdate
规则具有最高优先级,因为:
dateValidation
规则,我收到了“必须是日期”错误date
规则已通过TRUE结果但我仍然得到'必须是日期'错误mvcdate
规则帮助了我。您始终可以在控制台中查看kendoValidator:
答案 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",
}
});