Элемент не проверяется с ненавязчивой проверкой после AJAX и динамического создания с использованием MVC 3 и jQuery

Вот моя проблема...

У меня есть страница, которая изначально отображает и отображает форму AJAX, созданную с использованием Ajax.BeginForm. Вводятся некоторые критерии и публикуется форма AJAX. Возвращается частичное представление, содержащее HTML-форму, созданную с помощью Html.BeginForm.

Пока все хорошо... На данный момент все работает нормально. Моя ненавязчивая клиентская проверка отлично работает с элементами, созданными из частичного представления. Моя проблема возникает, когда я пытаюсь создать некоторые динамические элементы ввода (через jQuery) и вставить/добавить их в форму, созданную частичным представлением. Я не могу получить ненавязчивую проверку клиента для моих динамически созданных элементов.

Я пробовал: - клонировать существующие элементы, изменять их идентификаторы/имена и добавлять их в DOM. - создание html-строк и вставка их в DOM.

После каждой вставки динамического элемента я пробовал вызывать: - $.validator.unobtrusive.parseElement() [новый элемент] - $.validator.unobtrusive.parse() [новый контейнер, документ и т. д.] - $.validator.unobtrusive .parseDynamicContent() [плагин]

Вот подробности кода jQuery...

$("#insert").live("click", function () {
    var html = "<input type='text' value='' name='CustomerNominationVolume' id='CustomerNominationVolume' data-val-required='The Nomination (Dth) field is required.' data-val-number='The field Nomination (Dth) must be a number.' data-val='true' /><br />"
    html += "<span class='field-validation-valid' data-valmsg-replace='true' data-valmsg-for='CustomerNominationVolume'></span>";
    $("#new").html(html);
});

$("#parse").live("click", function () {
    $.validator.unobtrusive.parse(document);
});

$("#validate").live("click", function () {
    var element = $("#CustomerNominationVolume");
    var form = $(element).first().closest('form');
    form.validate().element(element);
});

Любая помощь будет ОЧЕНЬ оценена!

EDIT: После дополнительных исследований и тестирования я вернулся к этому solution, чтобы определить, почему у меня это не работает. Как оказалось, я вставлял новые элементы ввода, которые были частью списка. Поэтому имя моих новых элементов будет выглядеть примерно так: something[0].id, something[1].id и т.д...

Эти имена привели к сбою функции $.validator.unobtrusive.parseDynamicContent() в этой строке: $('[name=' + elname + ']').rules("add", args);

Я просто изменил это на $("[name='" + elname + "']").rules("add", args);

Теперь все работает нормально...


person stub    schedule 26.05.2011    source источник
comment
возможный дубликат Проблемы с ненавязчивой проверкой с mvc 3 в посте jquery ajax   -  person jgauffin    schedule 13.08.2011
comment
Другой возможный дубликат: stackoverflow.com /вопросы/6812779/   -  person jgauffin    schedule 13.08.2011


Ответы (1)


После того, как вы добавили свой динамический контент, вызовите:

    $("form").removeData("validator");
    $("form").removeData("unobtrusiveValidation");
    $.validator.unobtrusive.parse("form");

Где "$('form')" - это селектор для вашей формы.

Это должно делать свое дело.

person dazbradbury    schedule 25.10.2011
comment
Большое спасибо за ответ! Это спасло мой отпуск :D - person Vladislav Qulin; 18.08.2013
comment
По словам Брэда Уилсона, вам нужно только проанализировать новый контент: чтобы проанализировать новый HTML, вы можете вызвать метод jQuery.validator.unobtrusive.parse(), передав ему селектор HTML, который вы хотите проанализировать. Вы также можете вызвать функцию jQuery.validator.unobtrusive.parseElement() для анализа одного элемента HTML. bradwilson.typepad.com/blog/2010/10/ - person ps2goat; 08.08.2014