我很新的MVC所以这似乎是一个明显的问题,而是何时发布到我的ActionResult,ActionResult的将被调用,但是视图不会更改。

我在做什么是有一个基本的搜索页面,用户可以在搜索我的数据库,并返回结果和分页。

下面是的JavaScript调用,的ActionResult在我的控制器。

    function SubmitSearch() {

    var searchBox = document.getElementById('searchBox');

    $.post("MyController/SearchResults/",
    {
        searchString: searchBox.value,
        page: 0
    });

    window.location = "../DriverStudio/Drivers/SearchResults/" + searchBox.value + '/0';
}

我当前的解决方案(这是一个可怕的黑客)是注释掉$。员额(因为我的路线是建立在一种方式在了window.location会调用SearchResutls的ActionResult),并设置window.location的是什么用户搜索,从0开始页。

必须有更好的方法。我应该怎么办?

有帮助吗?

解决方案

设置您SearchResult所动作返回包含该页面的仅一部分的局部视图进行搜索时被更新。这件作品应该包含在某个容器中,因此很容易更换。然后使用该方法后回调机制与您的SearchResult所操作返回的局部视图结果以替换DIV的内容。从您的处理程序停止默认返回FALSE被取提交操作。

function SubmitSearch() { 

    var searchBox = $('#searchBox'); 

    $.post("MyController/SearchResults/", 
    { 
        searchString: searchBox.val(), 
        page: 0 
    }, function(data) {
        $('#searchResults').html( data );
    }); 

    return false;
}

此假设的一些视图代码看起来是这样的:

 <% using (Html.BeginForm()) { %
      <label for="searchBox">Search:</label>
      <%= Html.TextBox("searchBox") %>
 <% } %>
 <div id="searchResults">
 </div>

其他提示

我不熟悉MVC,但到底是什么你的ActionResult做的比其他重定向用户到URL你有window.location的?

您可能需要实现一个回调,从 jQuery的文档

 jQuery.post( url, data, callback, type )

所以,你传递你想返回的数据做什么URL和数据,但没有。

 $.post( "MyController/SearchResults/", 
         {searchString: searchBox.value,page: 0},
         function(result){
                //do something with what your actionresult returns here
                window.location = result.url;
         }
       );
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top