У меня есть проект asp.net mvc3, в котором я выполняю массовое редактирование таблицы с привязкой к нокауту. Я хочу выполнять проверки, такие как обязательные и числовые проверки, при сохранении данных. Есть ли более простой способ сделать нокаут проверки. PS: я не использую формы.
Проверка нокаута
Ответы (3)
Взгляните на Knockout-Validation, который четко настраивает и использует то, что описано в непроверенная документация. В разделе: Живой пример 1: принудительное числовое значение ввода
Вы можете увидеть это в Fiddle.
ОБНОВЛЕНИЕ: скрипт был обновлен для использования последней версии KO 2.0.3 и ko.validation 1.0.2 с использованием URL-адресов Cloudfare 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.' }
})
};
Если вы не хотите использовать библиотеку 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;
};
Затем в вашем viewModel вы можете наблюдать:
self.dateOfPayment: ko.observable().extend({ required: "" }),
В Интернете есть несколько примеров такого стиля проверки.
Проверка Knockout.js удобна, но ненадежна. Вы всегда должны создавать реплику проверки на стороне сервера. В вашем случае (поскольку вы используете Knockout.js) вы отправляете данные JSON на сервер и обратно асинхронно, поэтому вы можете заставить пользователя думать, что он видит проверку на стороне клиента, но на самом деле это будет асинхронная проверка на стороне сервера.
Взгляните на пример здесь upida.cloudapp.net :8080/org.upida.example.knockout/order/create?clientId=1 Это ссылка «Создать заказ». Попробуйте нажать "сохранить" и поиграться с продуктами. Этот пример выполнен с использованием библиотеки upida (есть версия spring mvc и asp.net mvc этой библиотеки) из codeplex.