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

onSearchSucceededonUpdateSucceeded功能对我来说似乎是正确的。正是在这些函数中,您告诉 jQuery 不显眼的框架新的 DOM 元素存在于结果 div 中并且需要注册。

令我困扰的是您的代码中的以下注释:

// 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 回答