ASP.Net MVC: Можете ли вы использовать аннотации / проверку данных с вызовом AJAX / jQuery?
Можете ли вы использовать аннотации / проверку данных с вызовом AJAX / jQuery? Если это так, пожалуйста, предоставьте пример или сообщение, которое показывает пример.
В основном я видел пример того, как использовать аннотации данных, однако это было с полным постом назад. Есть ли способ сделать с вызовом AJAX / jQuery? Не уверен, как вы это сделаете, так как я не уверен, как вы построите объект Model на стороне клиента. (Я предполагаю, что это то, что вам нужно сделать.)
Кто-то сказал мне, что это можно сделать, но я просто не понимаю, как это может быть.
Спасибо за вашу помощь.
2 ответа
Если вы используете Html.AjaxForm (вместо Html.BeginForm), он будет проверяться с использованием Ajax.
Однако я не думаю, что вы можете проверить с помощью jQuery. У Microsoft есть свои собственные библиотеки Ajax, и они сами ее вызывают / поддерживают. Я не думаю, что вы можете зацепить свой собственный код между ними.
Да - 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/
в любом случае, то, что у меня есть ниже, работает, и я в настоящее время использую это, хотя я добавил немного отладки к нему.
(function ($) {$.validator.unobtrusive.parseDynamicContent = function (селектор) { var len = $(селектор).length; //alert('got length'); if ($(селектор).length == 0) { alert('Селектор (обычно div), переданный в качестве корневого уровня для запуска анализа проверки (вместо повторного анализа всего документа), не может быть найден в DOM. Проверка в этой форме вряд ли продолжится. Параметр селектора:' + селектор); return; } // использовать обычный метод unobstrusive.parse $.validator.unobtrusive.parse(селектор); // получить соответствующую форму var form = $(селектор).first().closest('form'); if (form.length == 0) { alert('Не удалось найти форму, которая была родительской для селектора:' + selector + '\nValidation может работать неправильно'); return; } // получить коллекции ненавязчивых валидаторов и валидаторов jquery // и сравнить два var unobtrusiveValidation = form.data('unobtrusiveValidation'); //alert(unobtrusiveValidation.length); var validator = form.validate(); $.each(unobtrusiveValidation.options.rules, function (elname, elrules) { if (validator.settings.rules[elname] == undefined) { var args = {}; $.extend(args, elrules); args.messages = unobtrusiveValidation.options.messages[elname]; //$('[name=' + elname + ']').rules("add", args); $('[name="' + elname + '"]').rules("add", args); } else { $.each(elrules, function (rulename, data) { if (validator.settings.rules[elname][rulename] == undefined) { var args = {}; args[rulename] = data; args.messages = unobtrusiveValidation.options.messages[elname][rulename]; $('[name="' + elname + '"]').rules("add", args); } }); } }); } })($);
затем в каждом частичном представлении (или странице), которое вы используете для загрузки с помощью ajax, имейте это: (обратите внимание, editCustomerAddress - это имя div, которое содержит мое новое содержимое, поэтому jQuery не должен анализировать все на моей странице, а только из моего динамического содержимого вниз)