2016-12-06 61 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

我從通話中注意到,代碼創建了一個新的連接。並得到正確的結果。但問題在於寫作 –