ASP.NET MVC5: проверка формул клиента JQuery для отдельных компонентов, загружаемых AJAX - PullRequest
0 голосов
/ 16 октября 2019

У меня есть проект ASP.NET MVC5 с динамическими текстовыми полями. Это означает, что пользователь должен иметь возможность добавлять несколько текстовых полей в формулу поверх AJAX во время выполнения.

Form without errors

Структура модели:

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, больше не работает.

Only validation for first textbox

Сегодня я много искал эту проблему. Я узнал, что после вызова 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 кнопки плюс:

Validation triggered after second ajax call

Решение:

Вы должны удалить валидатор, и после удаления вы сможете снова проанализировать формуляр:

var form = $(formSelector)
    .removeData("validator") /* added by the raw jquery.validate plugin */
    .removeData("unobtrusiveValidation");  /* added by the jquery unobtrusive plugin*/

$.validator.unobtrusive.parse(form);

Ссылка: ненавязчивыйпроверка не работает с динамическим контентом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...