Модели просмотра карт для проверки KnockoutJS

17

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

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

EDIT: Пример. Автоматически поворачивайте это:

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

В это:

var viewmodel = {
    firstname: ko.observable().extend({ required: true });
}
    
задан Ryan 16.02.2012 в 02:11
источник
  • Используете ли вы аннотации данных для своих моделей C # и используете EditorFor для заполнения правил проверки клиентов или хотите? Вы можете использовать ту же самую ненавязчивую проверку клиентов, которую создал MVC, которую вы можете использовать для стандартных форм стиля MVC, при этом не слишком много работы (по крайней мере, в MVC3 с шаблоном интернет-приложения). –  kendaleiv 17.02.2012 в 23:27
  • Пожалуйста, ознакомьтесь с моими изменениями в оригинале –  Ryan 18.02.2012 в 04:27
  • Это очень интригующий подход, и я много думал об этом. Я думал о генерации кода поведения с C # на Javascript. Тем не менее, я думаю, вам нужно создать что-то, что отражает модель и генерирует javascript. Может быть, просто часть валидации и пусть плагин отображения делает то, что он делает. Комбинация отображения и сгенерированного кода проверки может дать вам то, что вам нужно. Причина, по которой я думаю, что вам нужно сгенерировать код проверки, состоит в том, что я думаю, что вам будет сложно генерировать код проверки, используя только Javascript, но я могу ошибаться. –  Mikael Östberg 20.02.2012 в 11:22
  • Как вы в настоящее время генерируете разметку в своем представлении? Вы вручную добавляете значение data-bind="value: someProp"? –  madcapnmckay 29.02.2012 в 18:34

4 ответа

7

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

    
ответ дан Francesco Abbruzzese 29.02.2012 в 22:33
  • Было бы здорово, если бы вы могли начать с того, как вы его реализовали, используя MVC Controls Toolkit. Большое спасибо –  Ian 02.02.2016 в 11:51
5

Если вы используете 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;
    }

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

    
ответ дан pilavdzice 09.03.2012 в 21:38
  • +1 Мне нравится простота вашего решения. Я в настоящее время борется с jQuery valdiate для необязательных полей и Knockout, и ваш ответ указал мне в новом направлении. –  David Robbins 08.02.2013 в 17:17
1

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

$.validator.unobtrusive.parse(yourFormElement)

Код из: Ссылка

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

    
ответ дан kendaleiv 18.02.2012 в 19:59
  • Это не является предпочтительным способом проверки KnockoutJs. Вы не хотите проверять элементы формы. Вы хотите проверить модель просмотра. –  Mikael Östberg 20.02.2012 в 11:14
  • Есть ли простой способ повторно использовать DataAnnotations или FluentValidator .Net-код с проверкой нокаута и проверить ли он модель просмотра Knockout? Я бы предпочел избежать создания и поддержки двух наборов правил проверки, но это может быть еще сложнее, если модель просмотра Knockout и модель .Net не совпадают или слишком разнородны. –  kendaleiv 25.02.2012 в 07:32
  • «Это не самый предпочтительный способ проверки KnockoutJs». Зачем? Валидация подключается к пользовательским входам, а элементы ввода обычно отображаются в свойствах модели. Отображение сообщений об ошибках, которые не связаны с полем ввода, но с каким-либо имуществом модели, которое не видно пользователю, может сильно запутать пользователя. –  Francesco Abbruzzese 29.02.2012 в 22:43
0

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

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

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

    
ответ дан Mikael Östberg 16.02.2012 в 02:18
  • Пожалуйста, ознакомьтесь с моими изменениями в исходном вопросе –  Ryan 18.02.2012 в 04:27