在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 () {
}
}
});
}
之后的项目将被保存到我想重定向到另一个视图的数据库我想是。 (转发到动作)
我怎样才能做到这一点?
我试图用return RedirectToAction("Stores","Store")
在结束在控制器SaveItems
功能。 但它不工作
我也尝试添加window.location.replace("/Store/Stores");
在Ajax调用的完整功能,但也不能工作
任何帮助是极大的赞赏
非常感谢
您可以使用JavaScript重定向到新的一页。 的值设置window.location.href
在你的Ajax调用的新的URL success
/ complete
事件。
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文件中,你应该建立链接到应用程序根并传递到内外部的js文件的脚本/代码,并用它来建立的URL操作方法在解释这个职位 。
传递参数?
如果你想查询字符串某些参数传递到新的URL,就可以使用这个超负荷的的Url.Action
它接受routevalues以及建立与查询字符串的URL方法。
var newUrl = '@Url.Action("Stores","Store", new { productId=2, categoryId=5 })';
其中2和5可以与其他一些真实值替换。
由于这是一个html的辅助方法,它会在你的Razor视图只工作,不对外js文件。 如果你的代码是内外部的js文件,你需要手动构建URL查询字符串参数。
在生成服务端的新网址
它始终是一个好主意,利用MVC的辅助方法来生成正确的URL的操作方法。 从你的操作方法,你可以返回其对于新的URL重定向属性一个JSON strucutre。
您可以使用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
}
});
在行动,你可以这样写:
if(Request.IsAjaxRequest()) {
return JavaScript("document.location.replace('"+Url.Action("Action", new { ... })+"');"); // (url should be encoded...)
} else {
return RedirectToAction("Action", new { ... });
}
尝试
window.location = "/Store/Stores";
代替。