ASP.Net MVC: Можете ли вы использовать аннотации / проверку данных с помощью вызова AJAX / jQuery?

#ajax #asp.net-mvc #data-annotations

#ajax #asp.net-mvc #данные-аннотации

Вопрос:

Можете ли вы использовать аннотации / проверку данных с помощью вызова AJAX / jQuery? Если да, пожалуйста, предоставьте пример или сообщение, в котором показан пример.

В принципе, я видел пример того, как использовать аннотации данных, однако это было с полным ответом на публикацию. Есть ли способ сделать это с помощью вызова AJAX / jQuery? Не уверен, как вы это сделаете, поскольку я не уверен, как вы создадите объект модели на стороне клиента. (Я предполагаю, что это то, что вам пришлось бы сделать.)

Кто-то сказал мне, что это можно сделать, но я просто не понимаю, как это может быть.

Спасибо за вашу помощь.

Ответ №1:

Да — 100% Я делаю это постоянно. Используйте Ajax.BeginForm и используйте ненавязчивую проверкуhttp://completedevelopment.blogspot.com/2011/02/unobstrusive-javascript-in-mvc-3-helps.html

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

Я полагаю, что я почерпнул эту идею / код из:http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-content

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

(функция ($) {
 $.validator.unobtrusive.parseDynamicContent = функция (селектор) {

 var len = $(селектор).длина;

 //оповещение ('есть длина');
 if ($(селектор).длина == 0) { 
 предупреждение ('Не удалось найти в DOM селектор (обычно div), переданный в качестве корневого уровня для запуска синтаксического анализа проверки (вместо повторного анализа всего документа). Проверка в этой форме, скорее всего, продолжаться не будет. Параметр селектора:'   селектор);
 Возврат;
 }
 // используйте обычный ненавязчивый метод.parse 
 $.validator.unobtrusive.parse (селектор);

 // получить соответствующую форму 
 var form = $(selector).first().closest('форма');
 if (form.length == 0) { 
 предупреждение ('Не удалось найти форму, которая была родительской для selector:'   selector   'nValidation может не работать должным образом');
 Возврат;
 }


 // получить коллекции ненавязчивых средств проверки и jquery validators
 // и сравнить два 
 var unobtrusiveValidation = form.data('Ненавязчивая проверка');
 //оповещение (ненавязчивая проверка.длина);
 var validator = form.validate();

 $.each (ненавязчивая проверка.параметры.правила, функция (elname, elrules) {
 если (validator.settings.rules[elname] == не определено) { 
 var args = {}; 
 $.extend(аргументы, инструкции);
 аргументы.сообщения = ненавязчивая проверка.параметры.сообщения[elname];
 //$('[name='   elname   ']').правила("добавить", аргументы);
 $('[name="'   elname   '"]').правила("добавить", аргументы);
 } else { 
 $.each(элементы, функция (имя правила, данные) { 
 если (validator.settings.rules[elname] [имя правила] == не определено) { 
 var args = {}; 
 аргументы [имя правила] = данные;
 аргументы.сообщения = ненавязчивая проверка.параметры.сообщения[elname][rulename];

 $('[name="'   elname   '"]').правила("добавить", аргументы);
 }
 });
 }
 });

 }
})($);

затем в каждом частичном представлении (или странице), для загрузки которого вы используете ajax, используйте это: (обратите внимание, что editCustomerAddress — это имя div, содержащее мой новый контент, поэтому jQuery не нужно повторно обрабатывать все на моей странице, а только начиная с моего динамического контента)

 <тип скрипта="текст / javascript">
 попробуйте {
 // Поскольку это могло быть загружено как динамическое содержимое, убедитесь, что проверка клиента jQuery знает, что мы должны проверять содержимое в этом представлении.
 /Проверка jQuery выполняется при загрузке исходной страницы - для исходного содержимого, а не для динамического (в данном случае ajax) содержимого.
 // Нам не нужно проверять всю форму заново, только начиная с этого div.

 // если у меня проблема в jQuery 5, то попробуйте: $.validator.unobtrusive.parse("#editZone> div> form"); 
 $.validator.unobtrusive.parseDynamicContent('#editCustomerAddress');
 }
 ошибка (catch) {
 предупреждение ('Произошла ошибка при попытке сообщить jQuery о проверке нашего нового содержимого. Убедитесь, что включен код для parseDynamicContent и вы ссылаетесь на допустимый элемент. Также убедитесь, что форма имеет контекст, если это частичное представление, вызвав if (viewContext.FormContext == null){viewContext.FormContext = new FormContext();} Если этот код отсутствует, атрибуты data-val-* отображаться не будут.n'   ошибка);
 }

 </script>

Кроме того, вы хотите убедиться, что ваши частичные представления, у которых нет собственных ajax или html-форм, вам нужно иметь контекст формы через

@{ if(viewContext.FormContext == null) {viewContext.FormContext = новый FormContext(); }

в противном случае ваши атрибуты data-val-* не будут выдаваться вспомогательными методами. Это необходимо, если в ваших представлениях нет Ajax.BeginForm или Html.BeginForm для создания собственного контекста формы.

Ответ №2:

Если вы используете Html.ajaxForm (вместо Html.BeginForm), то проверка будет выполняться с использованием Ajax.

Однако я не думаю, что вы можете выполнить проверку с помощью jQuery. У Microsoft есть собственные библиотеки Ajax, и они сами вызывают / поддерживают их. Я не думаю, что вы можете подключить свой собственный код между ними.

Комментарии:

1. начиная с mvc3 библиотеки ms в основном полагаются на jQuery за кулисами — к счастью!

2. Я смог сделать это с помощью ajaxForm