Ajax.BeginForm搜索不在Controller中调用方法(MVC 4)

时间:2014-11-03 14:42:00

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

我的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毫秒,搜索工作正常。

1 个答案:

答案 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: []
    });
});