Пользовательские ненавязчивые валидаторы даты
Может быть, так работает мой разум, но мне очень трудно понять, как вы должны делать пользовательские ненавязчивые валидаторы. Часть C# достаточно проста, но адаптеры jqueryui - то, где я теряюсь.
Я пытался сделать валидатор, который требует, чтобы дата была определенным количеством времени в прошлом. Я использую это для подтверждения возраста, чтобы удостовериться, что кто-то ввел дату, которой 18 лет.
В конце концов я решил сделать его удаленным валидатором, чтобы валидация использовала один и тот же код как на стороне клиента, так и на стороне сервера. Тем не менее, я был бы заинтересован в jquery, чтобы сделать эту работу.
Я хотел бы, чтобы у расширений аннотации данных были функции даты.
1 ответ
Вы можете найти много информации в статье блога Брэда Уилсона о ненавязчивой проверке с помощью asp.net mvc, включая создание пользовательских валидаторов.
Основано на следующем html (должен быть вывод помощника TextBox)
<input type="text" name="Age"
data-val="true"
data-val-required="This field is required"
data-val-minage="You should be 18 years or older, go get your parents!"
data-val-minage-value="18" />
<input type="submit"/>
Вы можете добавить следующий javascript для проверки на стороне клиента:
// Extend date with age calculator
Date.prototype.age = function (at) {
var value = new Date(this.getTime());
var age = at.getFullYear() - value.getFullYear();
value = value.setFullYear(at.getFullYear());
if (at < value) --age;
return age;
};
// Add adapter for minimum age validator. Wrap in closure
(function ($) {
$.validator.unobtrusive.adapters.addSingleVal("minage", "value");
} (jQuery));
// Add client side minimum age validator
$.validator.methods.minage = function (value, element, params) {
// If no value is specified, don't validate
if (value.length == 0) {
return true;
}
var dob = new Date(Date.parse(value));
if (dob.age(new Date()) < params || dob == 'Invalid Date') {
return false;
}
return true;
};
Кредиты для калькулятора возраста принадлежат Дэйву
Единственное, чего здесь не хватает, это глобализации, но я решил, что это выходит за рамки вопроса. Кстати, очень легко реализовать с помощью плагина jquery Globalize
Надеюсь это поможет