在ASP.NET MVC3应用程序中,视图中有一个按钮。
单击该按钮时,将调用一个函数,并进行jquery ajax调用以将项保存到数据库
function SaveMenuItems() {
var encodeditems = $.toJSON(ids);;
$.ajax({
type: 'POST',
url: '@Url.Action("SaveItems", "Store")',
data: 'items=' + encodeditems + '&storeKey=@Model.StoreID',
complete: function () {
}
}
});
}
我想要的是在项目保存到数据库后,我想重定向到另一个视图。(重定向至操作)
我该怎么做呢?
在SaveItems
函数的末尾,我尝试在控制器中使用return RedirectToAction("Stores","Store")
。但是它不起作用。
我还尝试在ajax调用的完整函数中添加window.location.replace("/Store/Stores");
,但也不起作用
非常感谢您的任何帮助。
非常感谢
发布于 2012-04-17 00:34:50
您可以使用javascript重定向到新页面。在ajax调用的success
/complete
事件中,将window.location.href
的值设置为新的url。
var saveUrl = '@Url.Action("SaveItems","Store")';
var newUrl= '@Url.Action("Stores","Store")';
$.ajax({
type: 'POST',
url: saveUrl,
// Some params omitted
success: function(res) {
window.location.href = newUrl;
},
error: function() {
alert('The worst error happened!');
}
});
或在done
事件中
$.ajax({
url: someVariableWhichStoresTheValidUrl
}).done(function (r) {
window.location.href = '@Url.Action("Stores","Store")';
});
上面的代码使用Url.Action
帮助器方法来构建操作方法的正确相对url。如果你的javascript代码在一个外部的javascript文件中,你应该构建指向应用根目录的url,并将其传递给外部js文件中的脚本/代码,并使用它来构建指向动作方法的url,如this post中所述。
传递参数?
如果你想将一些查询字符串参数传递给新的url,你可以使用Url.Action
方法的this overload来构建带有查询字符串的url,该方法也接受routevalue。
var newUrl = '@Url.Action("Stores","Store", new { productId=2, categoryId=5 })';
其中2和5可以用一些其他实值替换。
由于这是一个html助手方法,它只能在你的razor视图中工作,而不能在外部js文件中工作。如果您的代码位于外部js文件中,则需要手动构建url查询字符串参数。
在服务器端生成新的url
使用mvc帮助器方法来生成指向操作方法的正确urls始终是一个好主意。从你的action方法中,你可以返回一个json结构体,它有一个新的url被重定向的属性。
您可以在控制器中使用UrlHelper
类来完成此操作。
[HttpPost]
public ActionResult Step8(CreateUser model)
{
//to do : Save
var urlBuilder = new UrlHelper(Request.RequestContext);
var url = urlBuilder.Action("Stores", "Store");
return Json(new { status = "success", redirectUrl = url });
}
现在,在ajax调用的success
/done
回调中,只需检查返回值并根据需要进行重定向。
.done(function(result){
if(result.status==="success")
{
window.location.href=result.redirectUrl;
}
else
{
// show the error message to user
}
});
发布于 2014-02-02 20:08:00
实际上,你可以这样写:
if(Request.IsAjaxRequest()) {
return JavaScript("document.location.replace('"+Url.Action("Action", new { ... })+"');"); // (url should be encoded...)
} else {
return RedirectToAction("Action", new { ... });
}
发布于 2012-04-17 00:32:10
试一试
window.location = "/Store/Stores";
而不是。
https://stackoverflow.com/questions/10178007
复制相似问题