Ajax调用只有一次ASP.Net MVC5

时间:2016-12-06 15:52:41

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

我在ASP.Net MVC5中编写了一个AJAX函数,我遇到的问题是表单AJAX请求只出现一次。这是一个搜索页面。选择过滤器后按下搜索,我得到了正确的结果。但是,如果我更改过滤器并再次单击搜索提交,则不会发生任何事情。

var ajaxFormSubmit = function() {
    var $form = $(this);
    var options = {
        url: $form.attr("action"),
        type: $form.attr("method"),
        data: $form.serialize()
    };

    $.ajax(options).done(function (data) {
        var target = $($form.attr("data-enbw-target"));
        target.replaceWith(data);
        debugger;
    });

    return false;
};
$("form[data-enbw-ajax='true']").submit(ajaxFormSubmit);
<form method="get" id="documentForm" action="@Url.Action("Index", "DocumentSearch")" def data-enbw-ajax="true" data-enbw-target="#documentSearchResult">
    <button type="submit" id="submitbtn" name="submitbtn" tabindex="100" class="k-button">
        <img src="~/Content/search_small_icon.png" /> 
        @WebResources.DocumentSearchButton
    </button>
</form>
@Html.Partial("Results", @Model)
public ActionResult Index(DocumentSearchInput model)
{
    if (Request.IsAjaxRequest())
    {
        return PartialView("Results", result);
    }

    return View(result);
}

我没有收到任何错误。当我得到一个调试器;在javascript中。新数据是正确的。能帮帮我吗。

2 个答案:

答案 0 :(得分:2)

您正在替换ajax成功中的表单。因此,新表单将不具有提交绑定。如果你真的想要这样做,你将不得不重新绑定到新表单,或者可能使用委托代替。

$('parentSelector').on('event', 'childSelector', function(){});

parentSelector - 预先存在子元素的子元素的父元素,通常不应在页面生命周期内删除/创建。

childSelector - 将在页面生命周期的某个时刻创建/更改/删除的元素的选择器。

答案 1 :(得分:0)

我找到了答案。 问题不在于提交。问题在于重写数据。

$.ajax(options).done(function (data) {
    $("#documentSearchResult").empty();
    $("#documentSearchResult").html(data);
});

简单地说,我清空div然后写进去。