Подтвердить что ты не робот

Проверка нокаута

У меня есть проект asp.net mvc3, где я делаю массовое редактирование на таблице с привязкой к нокауту. Я хочу делать проверки, как требуемые и числовые проверки при сохранении данных. Есть ли более простой способ сделать нокаут проверки. PS: Я не использую формы.

4b9b3361

Ответ 1

Посмотрите Knockout-Validation, который тщательно настраивает и использует то, что описано в документации нокаутом. В: Live Пример 1: Принудительный ввод для числа

Вы можете видеть его вживую в Fiddle

UPDATE: скрипт был обновлен, чтобы использовать последние версии KO 2.0.3 и ko.validation 1.0.2, используя URL-адреса CDN для облачных вычислений

Чтобы установить ko.validation:

ko.validation.rules.pattern.message = 'Invalid.';

ko.validation.configure({
    registerExtenders: true,
    messagesOnModified: true,
    insertMessages: true,
    parseInputAttributes: true,
    messageTemplate: null
});

Чтобы настроить правила проверки, используйте расширения. Например:

var viewModel = {
    firstName: ko.observable().extend({ minLength: 2, maxLength: 10 }),
    lastName: ko.observable().extend({ required: true }),
    emailAddress: ko.observable().extend({  // custom message
        required: { message: 'Please supply your email address.' }
    })
};

Ответ 2

Если вы не хотите использовать библиотеку KnockoutValidation, вы можете написать свой собственный. Здесь приведен пример обязательного поля.

Добавьте класс javascript со всеми расширениями или расширениями KO и добавьте следующее:

ko.extenders.required = function (target, overrideMessage) {
    //add some sub-observables to our observable
    target.hasError = ko.observable();
    target.validationMessage = ko.observable();

    //define a function to do validation
    function validate(newValue) {
    target.hasError(newValue ? false : true);
    target.validationMessage(newValue ? "" : overrideMessage || "This field is required");
    }

    //initial validation
    validate(target());

    //validate whenever the value changes
    target.subscribe(validate);

    //return the original observable
    return target;
};

Затем в вашем представленииModel расширяет видимость следующим образом:

self.dateOfPayment: ko.observable().extend({ required: "" }),

В этом стиле проверки есть ряд примеров в Интернете.

Ответ 3

Проверка Knockout.js удобна, но она не является надежной. Вам всегда нужно создать репликацию валидации на стороне сервера. В вашем случае (когда вы используете knockout.js) вы отправляете данные JSON на сервер и асинхронно, поэтому вы можете заставить пользователя подумать, что он видит проверку на стороне клиента, но на самом деле это будет асинхронная проверка на стороне сервера.

Взгляните сюда на пример upida.cloudapp.net:8080/org.upida.example.knockout/order/create?clientId=1 Это ссылка "Создать заказ". Попробуйте нажать "сохранить" и сыграть с продуктами. Этот пример выполняется с использованием библиотеки upida (есть версия spring mvc и asp.net mvc этой библиотеки) из codeplex.