ASP.Net MVC - 部分刷新后客户端验证中断了吗?

时间:2013-03-17 22:21:43

标签: jquery asp.net-mvc unobtrusive-javascript unobtrusive-validation unobtrusive-ajax

我有一个包含搜索栏的页面,默认情况下会显示以下项目列表。 每个项目都包含在ajaxform中,以便用户可以更新数量。 客户端验证在页面加载时完全正常,并且需要数量。

只要用户点击搜索,部分的结果就会刷新,我的整个验证就会中断,并且它不再显示验证摘要。

我尝试通过调用$.validator.unobtrusive.parse($("#resultList"));刷新部分后重新添加验证 但它似乎没有做任何事情。

任何解决方案?

的MainForm

<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
     }
}

1 个答案:

答案 0 :(得分:2)

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

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

// 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();
});