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 не должен анализировать все на моей странице, а только из моего динамического содержимого вниз)