我的Ajax.BeginForm没有将搜索条件提交给控制器。代码如下:
@using (Ajax.BeginForm("Index_AddSearchCriteria", "Home", new AjaxOptions {HttpMethod = "GET", InsertionMode = InsertionMode.Replace, UpdateTargetId = "SearchDiv" }))
{
// @Html.Label("Search: ") // should I use this instead?
// @Html.TextBox("search_criteria") // should I use this instead?
<input type="text" name="search_criteria" />
<input type="submit" value="Search" />
}
<div id="SearchDiv">
</div>
并在控制器中
public PartialViewResult Index_AddSearchCriteria(string search_criteria)
{
ViewModel.SearchCriteria = search_criteria;
return PartialView("SearchBar", ViewModel);
}
我在我的Index_AddSearchCriteria中设置了一个断点,即使我按下“搜索”按钮也没有。
我已经加载了jquery和unobtrusive-ajax。
编辑: 这是我得到的错误 -
POST http://localhost:51989/Home/Index_AddSearchCriteria 404 (Not Found) jquery-1.8.2.js:8430
send jquery-1.8.2.js:8430
jQuery.extend.ajax jquery-1.8.2.js:7982
asyncRequest jquery.unobtrusive-ajax.js:121
(anonymous function)
jquery.unobtrusive-ajax.js:171
jQuery.event.dispatch jquery-1.8.2.js:3077
elemData.handle.eventHandle
编辑2: 因此代码确实有效,但我在同一页面上还有另一个PartialView,它使用Ajax并每隔100ms轮询一次,这似乎需要很长时间才能发送搜索查询。我将其更改为1000毫秒,搜索工作正常。
答案 0 :(得分:1)
我能够复制你的问题。基本上,你没有做一个AJAX&#34; Get&#34; (因此错误中的POST)你只是做一个标准的网络帖子。我最终能解决这个问题。似乎jquery.unobtrusive-ajax有一个问题,你需要更改代码,以便所有&#34; .live&#34;事件成为&#34; .on&#34;事件
$("a[data-ajax=true]").live("click", function (evt) {
evt.preventDefault();
asyncRequest(this, {
url: this.href,
type: "GET",
data: []
});
});
To - (请不要有一些.live事件,所以你应该更改它们。除非你改变它也不要引用min文件)
$("a[data-ajax=true]").on("click", function (evt) {
evt.preventDefault();
asyncRequest(this, {
url: this.href,
type: "GET",
data: []
});
});