настраиваемые ненавязчивые валидаторы даты - PullRequest
2 голосов
/ 27 августа 2011

Может быть, именно так работает мой разум, но мне очень трудно понять, как вы должны делать пользовательские ненавязчивые валидаторы.Часть C # достаточно проста, но адаптеры jqueryui - то, где я теряюсь.

Я пытался создать валидатор, который требует, чтобы дата была определенным количеством времени в прошлом.Я использую это для проверки возраста, чтобы удостовериться, что кто-то ввел дату, которой в прошлом было 18 лет.

Я наконец решил просто сделать это удаленной валидатором, чтобы валидация использовала один и тот же код для обоих клиентов.и серверная сторона.Тем не менее, я был бы заинтересован в jquery, чтобы сделать эту работу.

Я хотел бы, чтобы Расширения аннотации данных имели функции даты.

1 Ответ

2 голосов
/ 27 августа 2011

Вы можете найти много информации в статье блога Брэда Уилсона о ненавязчивой проверке с помощью 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

Надеюсь, это поможет

...