Обязательные проверки полей не работают в JQuery Popup MVC 4

У меня есть всплывающие окна JQuery, и я хочу поместить в него необходимые проверки полей, и для этого я установил необходимые атрибуты в модели, а также установил для них сообщение проверки в представлении, но требуемые проверки полей не работают во всплывающих окнах. Обязательная проверка поля отлично работает в формах, отличных от всплывающих окон JQuery.... Пожалуйста, подскажите, что мне делать, чтобы решить эту проблему... Ниже приведен мой код.

Модель

[Display(Name = "Material Code")]
[Required(ErrorMessage = "*")]
public string MaterialCode { get; set; }

Вид

<li>
    @Html.LabelFor(m => m.MaterialCode)
    @Html.TextBoxFor(m => m.MaterialCode)
    @Html.HiddenFor(m => m.MaterialCodeId)
</li>

и ниже мой код, чтобы открыть всплывающее окно JQuery.

$('#btnAddCharge').on('click', function (event) {  
        event.preventDefault();
        var actionURL = '@Url.Action("Edit", "Charges", new { Id = 0, @ticketId = @TicketId, UserId = UserId })';

        $(dialogBox).dialog({
            autoOpen: false,
            resizable: false,
            title: 'Edit',
            modal: true,
            show: "blind",
            width: 'auto',
            hide: "blind",
            open: function (event, ui) {
                $(this).load(actionURL, function (html) {
                    $('form', html).submit(function () {
                        $.ajax({
                            url: this.action,
                            type: this.method,
                            data: $(this).serialize(),
                            success: function (res) {
                                if (res.success) {
                                    $(dialogBox).dialog('close');
                                }
                            }
                        });
                        return false;
                    });
                });
            }
        });

        $(dialogBox).dialog('open');
    });

person ARC    schedule 02.08.2015    source источник
comment
Вы динамически загружаете форму во всплывающем окне (например, используя ajax?)   -  person    schedule 02.08.2015
comment
@StephenMuecke да, я использую ajax   -  person ARC    schedule 02.08.2015
comment
Вам нужно перепарсить валидатор. Вам нужно показать свой сценарий, чтобы дать ответ (отредактируйте вопрос, чтобы включить его).   -  person    schedule 02.08.2015


Ответы (1)


Валидатор анализируется при первоначальной загрузке страницы. Когда вы добавляете динамический контент, вам нужно перепарсить валидатор. Измените свой сценарий, чтобы включить следующие строки после загрузки содержимого.

$(this).load(actionURL, function (html) {
    // Reparse the validator
    var form = $('form');
    form.data('validator', null);
    $.validator.unobtrusive.parse(form);
    $('form', html).submit(function () {
        ....

Боковое примечание: показанный вами код не включает @Html.ValidationMessageFor(m => m.MaterialCode), но я предполагаю, что он включен.

person Community    schedule 02.08.2015
comment
В чем разница между этим кодом JS и этим? stackoverflow.com/questions/7839453/ - person markzzz; 23.07.2018
comment
@markzzz, $("form").removeData("validator"); в этом контексте по сути то же самое, что и form.data('validator', null);. 1-й удаляет ранее добавленный валидатор, используя .removeData(), где 2-й устанавливает его на null с помощью .data(). $("form").removeData("unobtrusiveValidation"); в другом ответе на самом деле не нужен, потому что $.validator.unobtrusive.parse(form); все равно эффективно сбрасывает его. (и это напоминает мне, что я собираюсь добавить ответ на один из ваших вопросов несколько дней назад :) - person ; 23.07.2018