#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