必填字段验证在 JQuery Popup MVC 4 中不起作用

IT技术 javascript jquery asp.net-mvc validation unobtrusive-validation
2021-01-17 11:27:09

我有 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');
    });
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)但我认为这包括在内。

@markzzz,$("form").removeData("validator");本质上与form.data('validator', null);此上下文中的相同第一个使用.removeData()删除先前添加的验证器,而第二个将其设置为null使用.data()$("form").removeData("unobtrusiveValidation");因为在对方的回答是不是真的有必要$.validator.unobtrusive.parse(form);有效地重置了反正。(这让我想起我将在几天前对您的一个问题添加一个答案:)
2021-03-26 11:27:09
这个JS代码和这个有什么区别?stackoverflow.com/questions/7839453/...
2021-03-31 11:27:09