jquery $ .Post不会更改视图。我该怎么办?

问题描述:

我对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),并设置窗口.location转到用户搜索的内容,从第0页开始。

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

设置您的SearchResults操作以返回仅包含要执行搜索时要更新的页面部分的部分视图。这件作品应该放在一些容器中,以便更换。然后使用post方法的回调机制将该DIV的内容替换为SearchResults操作返回的部分查看结果。从您的处理程序中返回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> 
+0

谢谢tvan。它是否必须是局部视图?为什么我无法返回整个视图? – Darcy 2010-02-25 20:51:28

+2

@Darcy - 基本上和做普通(非AJAX)的帖子一样。使用局部视图只会发送更新的部分,这就是使用AJAX的一点。 – tvanfosson 2010-02-25 20:54:56

我不熟悉MVC,但除了将用户重定向到window.location中的URL之外,您的ActionResult还能做什么?

您可能需要实现一个回调,从jQuery docs

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; 
     } 
     ); 
+0

嗯,这似乎是票。 'result.url'虽然不起作用。如果我提醒'结果',我得到的意见(所以DOCTYPE ....等东西)。我将如何从那里获得网址? – Darcy 2010-02-25 20:57:55

+0

为什么要做一个AJAX帖子,如果你打算只是转过头来,通过设置url来做一个正常的GET? – tvanfosson 2010-02-25 20:59:01

+0

我认为在tvanfosson描述的方式,将HTML插入一个div。你可能只想提取body标签中的元素。 – 2010-02-25 20:59:48