У меня есть проект ASP.NET MVC5 с динамическими текстовыми полями. Это означает, что пользователь должен иметь возможность добавлять несколько текстовых полей в формулу поверх AJAX во время выполнения.
Структура модели:
public class TextboxFormModel
{
public IList<SingleTextboxModel> Textboxes { get; set; }
}
public class SingleTextboxModel
{
[StringLength(100, ErrorMessage = "Maximum 100 characters")]
[RegularExpression(@"^[a-zA-Z0-9]{0,100}$",
ErrorMessage = "Only letters and numbers are allowed")]
public string TextboxContent { get; set; }
}
AJAX-ответ для нового текстового поля передается через PartialView с AJAX-Post-Request.
Обработчик контроллера для добавления нового текстового поля:
[HttpPost]
public PartialViewResult AddNewBox(TextboxFormModel model)
{
model.Textboxes.Add(new SingleTextboxModel());
return PartialView("_Textboxes", model);
}
Я включил в свое представление jqueryval-скрипт и после ввода неверного ввода для первого не загруженного ajax текстового поля работает.
После добавления нового поля поверх плюсаКнопка проверки для второго текстового поля, загруженного ajax, больше не работает.
Сегодня я много искал эту проблему. Я узнал, что после вызова ajax необходимо сообщить валидатору jquery, что в формуле есть новые элементы. Я нашел три подхода:
// initializes the validation on page load, can be called only once
$('#myform').validate();
// Validates a single element
$('#myelement').val();
// Tell jquery validator the new form (only for unobstrusive validator?)
$.validator.unobtrusive.parse('#myform');
Забавный факт, что проверка второго текстового поля показывается после следующего вызова ajax кнопки плюс:
Решение:
Вы должны удалить валидатор, и после удаления вы сможете снова проанализировать формуляр:
var form = $(formSelector)
.removeData("validator") /* added by the raw jquery.validate plugin */
.removeData("unobtrusiveValidation"); /* added by the jquery unobtrusive plugin*/
$.validator.unobtrusive.parse(form);
Ссылка: ненавязчивыйпроверка не работает с динамическим контентом