0

検索バーを含むページがあり、デフォルトでは下に項目のリストが表示されます。ユーザーが数量を更新できるように、各アイテムは ajaxform 内にラップされます。クライアント側の検証は、ページの読み込み時に完全に正常に機能し、数量が必要です。

ユーザーが検索をクリックするとすぐに、パーシャルの結果が更新され、検証全体が中断され、検証の概要が表示されなくなります。

呼び出してパーシャルをリフレッシュした後、検証を追加しようとしました$.validator.unobtrusive.parse($("#resultList")); が、何もしないようです。

解決策はありますか?

メインフォーム

<script>
function onSearchSucceeded() {
   $.validator.unobtrusive.parse($("#resultList"));
}

function onUpdateSucceeded() {
   $.validator.unobtrusive.parse($("#resultList"));
}

$(function () {

    $("#resultList :input[type=text]").blur(function () {
        $(this).closest("form").submit();
    });

)};

</script>


@using (Ajax.BeginForm("Search",
    null,
    new AjaxOptions
    {
        UpdateTargetId = "resultList",
        LoadingElementId = "searchLoader",
        OnSuccess = "onSearchSucceeded"
    },
    new
    {
        id = "searchForm"
    }
    ))
{
   @Html.TextBoxFor(m => m.query)
   <input type="submit" value="search" />
}


<div id="resultList">
   @Html.Partial("SearchResult", Model.Results)
</div>

部分的

@foreach (var item in Model) {
    using (Ajax.BeginForm("UpdateItem",
        new AjaxOptions {
            UpdateTargetId = "resultList",
            OnSuccess = "onUpdateSucceeded"
        },
        null,
        new{
            id = "form-" + item.Id
        }
     )){
       @Html.TextBoxFor(m => item.Quantity)
       @Html.ValidationSummary()
       // This form gets submitted through javascript after a blur on quantity textfield
     }
}
4

1 に答える 1

2

onSearchSucceededと関数はonUpdateSucceeded私には正しいようです。新しいDOM要素が結果のdivに存在し、登録する必要があることをjQueryの控えめなフレームワークに伝えているのは、これらの関数内です。

私を悩ませたのは、コード内の次のコメントです。

// This form gets submitted through javascript after a blur on quantity textfield

残念ながら、これがどのように行われるかを正確に示していませんが、次のコードはうまくいきました:

$(document).on('blur', 'form[id^="form-"] input[name$="Quantity"]', function () {
    $(this).closest('form').submit();
});
于 2013-03-18T07:45:52.677 に答える