2016-12-06 34 views
0

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

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中。新数据是正确的。你能帮我么。

+0

您是否在事件的第一行尝试了一个调试器? – DontVoteMeDown

+1

'#documentSearchResult'元素是'form'的父元素吗?如果是这样,你需要使用委托事件处理程序。 –

+0

我想建议你也看看使用'Ajax.BeginForm()'辅助方法,而不必编写自己的处理程序和东西。在适用的情况下,更容易使用恕我直言。如果它有任何用处,下面是另一个如何使用它的答案:http://stackoverflow.com/a/17096835/6240567 –

回答

0

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

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

简单地说,我清空div然后写在里面。

2

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

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

parentSelector - 预先存在子元素的子元素的父元素,通常不应在页面使用寿命期间被删除/创建。

childSelector - 一个选择器,用于在页面生命周期的某个点创建/更改/删除的元素。

+0

如何做到这一点? –

+0

@SamySammour例如通过使用[event-delegation](https://learn.jquery.com/events/event-delegation/) – empiric

+0

我从通话中注意到,代码创建了一个新的连接。并得到正确的结果。但问题在于写作 –