jquery$.Post不会更改视图。我该怎么办?
我是MVC新手,所以这似乎是一个显而易见的问题,但当发布到我的ActionResult时,ActionResult会被调用,但视图不会改变 我正在做的是有一个基本的搜索页面,用户可以在其中搜索我的数据库,然后返回结果并分页 下面是在我的控制器中调用ActionResult的javascriptjquery$.Post不会更改视图。我该怎么办?,jquery,asp.net-mvc,view,.post,Jquery,Asp.net Mvc,View,.post,我是MVC新手,所以这似乎是一个显而易见的问题,但当发布到我的ActionResult时,ActionResult会被调用,但视图不会改变 我正在做的是有一个基本的搜索页面,用户可以在其中搜索我的数据库,然后返回结果并分页 下面是在我的控制器中调用ActionResult的javascript function SubmitSearch() { var searchBox = document.getElementById('searchBox'); $.post("
function SubmitSearch() {
var searchBox = document.getElementById('searchBox');
$.post("MyController/SearchResults/",
{
searchString: searchBox.value,
page: 0
});
window.location = "../DriverStudio/Drivers/SearchResults/" + searchBox.value + '/0';
}
我目前的解决方案(这是一个可怕的黑客攻击)是注释掉$.post(因为我的路线是以window.location调用SearchResultls ActionResult的方式设置的),并从第0页开始将window.location设置为用户搜索的内容
一定有更好的办法。我该怎么办?我不太熟悉MVC,但是除了将用户重定向到window.location中的URL,ActionResult还能做什么 您可能需要从以下位置实现回调: 因此,您传递的是URL和数据,但与您希望如何处理返回的数据无关
$.post( "MyController/SearchResults/",
{searchString: searchBox.value,page: 0},
function(result){
//do something with what your actionresult returns here
window.location = result.url;
}
);
我不太熟悉MVC,但是除了将用户重定向到window.location中的URL之外,ActionResult做什么呢 您可能需要从以下位置实现回调: 因此,您传递的是URL和数据,但与您希望如何处理返回的数据无关
$.post( "MyController/SearchResults/",
{searchString: searchBox.value,page: 0},
function(result){
//do something with what your actionresult returns here
window.location = result.url;
}
);
设置SearchResults操作以返回部分视图,该视图仅包含执行搜索时要更新的页面部分。该部件应装在容器中,以便于更换。然后使用post方法上的回调机制,用SearchResults操作返回的部分视图结果替换该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>
设置SearchResults操作,以返回仅包含执行搜索时要更新的页面部分的局部视图。该部件应装在容器中,以便于更换。然后使用post方法上的回调机制,用SearchResults操作返回的部分视图结果替换该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>
谢谢tvan。它必须是局部视图吗?为什么我不能返回整个视图?@Darcy-这基本上与正常(非AJAX)帖子相同。使用局部视图只发送更新的部分,这是使用AJAX的一个要点。谢谢tvan。它必须是局部视图吗?为什么我不能返回整个视图?@Darcy-这基本上与正常(非AJAX)帖子相同。使用局部视图只发送更新的部分,这是使用AJAX的一个要点。嗯,这看起来像是一张罚单但“result.url”不起作用。如果我提醒'result',我会得到视图(所以DOCTYPE…等等)。我如何从那里获取url?如果你想通过设置url来实现正常的get,为什么要发布AJAX帖子?我想就像tvanfosson描述的那样,将HTML插入到div中。不过,你可能只想提取body标记中的元素。听起来你想要局部视图。我对MVC不太熟悉。我想你需要一个局部视图,否则那些正则表达式解决方案或某种将html解析为xml然后加载节点的方法就是我所能想到的。嗯,这看起来像是一张罚单。”但“result.url”不起作用。如果我提醒'result',我会得到视图(所以DOCTYPE…等等)。我如何从那里获取url?如果你想通过设置url来实现正常的get,为什么要发布AJAX帖子?我想就像tvanfosson描述的那样,将HTML插入到div中。不过,你可能只想提取body标记中的元素。听起来你想要局部视图。我对MVC不太熟悉。我想你需要一个局部视图,否则那些正则表达式解决方案或某种解析html为xml的方法,然后加载节点就是我所能想到的。