Вот моя проблема ...
У меня есть страница, которая изначально отображает и отображает форму 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:
После некоторых дополнительных исследований и тестирования я вернулся к этому решению , чтобы определить, почему оно не работает для меня. Как оказалось, я вставлял новые элементы ввода, которые были частью списка. Поэтому имя моих новых элементов будет выглядеть примерно так: что-то [0] .id, что-то [1] .id и т. Д. *
Эти имена вызвали сбой функции $ .validator.unobtrusive.parseDynamicContent () в этой строке:
$ ('[name =' + elname + ']'). rules ("add", args);
Я просто изменил это на
$ ("[name = '" + elname + "']"). rules ("add", args);
Теперь все работает нормально ...