Сопоставить модели представления с проверкой KnockoutJS - PullRequest
17 голосов
/ 16 февраля 2012

Я строил страницу, используя ASP.NET MVC 2, используя KnockoutJS, плагин KnockoutJS Mapping и jQuery 1.7.1. Я хотел бы также иметь возможность использовать плагин KnockoutJS Validation (найден здесь ). Однако мне нужно, чтобы проверка на стороне сервера и клиента происходила.

Возможно ли, чтобы мои модели представлений отображались на плагин проверки KnockoutJS , который использует метод .extend ()?

РЕДАКТИРОВАТЬ: Пример. Автоматически включите это:

[Required]
public string Firstname { get; set; }

В это:

var viewmodel = {
    firstname: ko.observable().extend({ required: true });
}

Ответы [ 4 ]

7 голосов
/ 01 марта 2012

В Mvc Controls Toolkit я реализовал механизм, который включает обычную проверку Mvc (аннотации данных или что-то еще) на knockout.js. Можно разрешить как проверку на стороне клиента, так и на стороне сервера. Кроме того, нокаут можно использовать с помощниками Mvc, некоторые привязки выводятся автоматически и т. Д.

5 голосов
/ 10 марта 2012

Если вы используете knockoutjs и jquery, я пришел к следующему очень простому способу выполнения базовой проверки на стороне клиента.

Везде, где вы хотите отобразить сообщение об ошибке на своей странице, добавьте тег span, как этот:

<span name="validationError" style="color:Red" 
data-bind="visible: yourValidationFunction(FieldNameToValidate())">
* Required.
</span>

Очевидно, что вам нужно написать «yourValidationFunction», чтобы делать то, что вы хотите. Он просто должен возвращать true или false, true означает, что отображается ошибка.

Вы можете использовать jquery для предотвращения продолжения работы пользователя, если отображаются какие-либо ошибки проверки. Возможно, у вас уже есть кнопка сохранения, которая запускает функцию javascript для выполнения какого-либо ajax или чего-то еще, поэтому просто добавьте это вверху:

 if ($("[name='validationError']:visible").length > 0) {
        alert('Please correct all errors before continuing.');
        return;
    }

Это намного проще и гибче, чем многие другие решения по валидации. Вы можете разместить свое сообщение об ошибке где угодно, и вам не нужно изучать, как использовать некоторую библиотеку проверки, и этот метод работает независимо от технологии на стороне сервера.

1 голос
/ 18 февраля 2012

Я бы порекомендовал использовать встроенную проверку MVC на стороне клиента, вам может потребоваться вызвать ее, попробуйте следующее:

$.validator.unobtrusive.parse(yourFormElement)

Код от: https://stackoverflow.com/a/5669575/941536

Не уверен, что у MVC2 есть ненавязчивая проверка на стороне клиента, но не уверен, что обновление для MVC3 подойдет вам в случае необходимости.

0 голосов
/ 16 февраля 2012

Плагин валидации работает так, как вы расширяете наблюдаемые, которые вы хотите проверить.

Не имеет значения, созданы ли они из сопоставлений, просто создайте функцию, которую вы запускаете после того, как сопоставление было выполнено, и добавьте всю необходимую проверку.

Или, если хотите, можете использовать привязки проверки. Прочитайте Readme на Github для проверки нокаута, и вы увидите, как они это делают.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...