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>
我不熟悉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;
}
);
嗯,这似乎是票。 'result.url'虽然不起作用。如果我提醒'结果',我得到的意见(所以DOCTYPE ....等东西)。我将如何从那里获得网址? – Darcy 2010-02-25 20:57:55
为什么要做一个AJAX帖子,如果你打算只是转过头来,通过设置url来做一个正常的GET? – tvanfosson 2010-02-25 20:59:01
我认为在tvanfosson描述的方式,将HTML插入一个div。你可能只想提取body标签中的元素。 – 2010-02-25 20:59:48
谢谢tvan。它是否必须是局部视图?为什么我无法返回整个视图? – Darcy 2010-02-25 20:51:28
@Darcy - 基本上和做普通(非AJAX)的帖子一样。使用局部视图只会发送更新的部分,这就是使用AJAX的一点。 – tvanfosson 2010-02-25 20:54:56