Задължителните валидации на полета не работят в 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); в този контекст. Първият премахва добавения по-рано валидатор с помощта на .removeData(), където вторият го задава на null с помощта на .data(). $("form").removeData("unobtrusiveValidation"); в другия отговор всъщност не е необходимо, защото $.validator.unobtrusive.parse(form); така или иначе ефективно нулира това. (и това ми напомня, че ще добавя отговор на един от вашите въпроси от преди няколко дни :) - person ; 23.07.2018