0

ドロップダウンリストから選択した値に応じて、ポップアップに複数回ロードするパーシャルがあります。パーシャルには、検証する必要があるテキスト ボックスがあります。問題は、検証が最初のパーシャルのテキスト ボックスでのみ機能することです。もう一方(この場合)については、有効であると言います。ここに表示するダミーアプリを作成しました。これは部分的なものです:

@Html.TextBoxFor(m => m.OrderedQuantity, new { name="somename", data_mini = "true", type = "number", @class = "orderedQuantity removeGroupsRequired" })

これは、パーシャルをロードするポップアップにあります。

 $.ajax({
        url: '@Url.Action("LoadSpecialOffersByOfferGroup", "Orders")',
        type: 'POST',
        data: JSON.stringify(),
        dataType: 'json',
        contentType: 'application/json',
        success: function (data) {
            $('#groupOfferSection').show();
            $.each(data, function (val, partial) {
                $('#specialOrderGroupDetailSection').append(partial);
                var form = $("#mydiv form")
                            .removeData("validator")
                            .removeData("unobtrusiveValidation");

                $('#specialOrderGroupDetailSection').trigger('create');
                $.validator.unobtrusive.parse(form);

            });

            $("#mydiv form .orderedQuantity").each(function() {
                $(this).rules("add", {
                    required: true,
                    messages: {
                        required: "you must provide a quantity!"
                    }
                });
            });


        }
    });
 $('#load').click(function () {
    $("#mydiv form").validate().resetForm();

    $("#mydiv form").data("validator").settings.ignore = ".removeRequired";
    ValidateGroups();

    var form1valid = $("#mydiv form").valid();
    if (form1valid) {

        $.mobile.hidePageLoadingMsg();
        $('#closeOrderItemAddPopup').click();
    }
});
function ValidateGroups() {

    $("#mydiv form").validate();

    if ($("#mydiv form").valid()) {
        alert("valid");
    } else {
        alert("invalid");
    }
}

パーシャルをロードするためのコントローラー部分:

public ActionResult LoadSpecialOffersByOfferGroup()
    {
        List<string> partials = new List<string>();
        IList<SpecialOfferGroupDetailBO> specialOfferGroupDetailBos = new List<SpecialOfferGroupDetailBO>
                                                                          {
                                                                              new SpecialOfferGroupDetailBO
                                                                                  {ItemID = 123}
                                                                          };
        SpecialOfferGroupDetailVM vm = new SpecialOfferGroupDetailVM();
        vm.SpecialOfferGroupID = 1;
        vm.SpecialOfferGroupName = "group 1";
        vm.SpecialOfferGroupDetailBos = specialOfferGroupDetailBos;
        string specialOfferGroupDetailView = RenderRazorViewToString("SpecialOfferGroupDetail", vm);
        partials.Add(specialOfferGroupDetailView);
        IList<SpecialOfferGroupDetailBO> specialOfferGroupDetailBos1 = new List<SpecialOfferGroupDetailBO>
                                                                          {
                                                                              new SpecialOfferGroupDetailBO
                                                                                  {ItemID = 125}
                                                                          };
        SpecialOfferGroupDetailVM vm1 = new SpecialOfferGroupDetailVM();
        vm1.SpecialOfferGroupID = 2;
        vm1.SpecialOfferGroupName = "group 2";
        vm1.SpecialOfferGroupDetailBos = specialOfferGroupDetailBos1;
        string specialOfferGroupDetailView1 = RenderRazorViewToString("SpecialOfferGroupDetail", vm1);
        partials.Add(specialOfferGroupDetailView1);
        JsonResult jsonResult = Json(partials);
        return jsonResult;
    }
4

1 に答える 1

0

コードは関数.validate()内からのみ呼び出します。ValidateGroups

function ValidateGroups() {

    $("#mydiv form").validate();

    ....

このプラグインについて覚えておくべき最も重要なことは、テスト方法で.validate()はないということです。これは、フォームでプラグインを初期化するための唯一の方法です。通常、これはDOM の準備完了時またはページの読み込み時に1 回行われます。これは 1 回だけ行われ、その後の呼び出しは無視されます。

$(document).ready(function() {

    $("#mydiv form").validate();  // initialize validation plugin on DOM ready event

    ....

動的に作成されたフォームで検証を初期化しようとしているように見えるので.validate()、フォームが作成またはロードされた直後に呼び出します。

$.ajax({
    // create/load your form
    ....
});

$("#mydiv form").validate();  // initialize validation plugin after form is created/loaded

....
于 2013-09-11T15:03:29.570 に答える