在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
。但它不起作用
我还尝试在ajax调用的完整函数中添加window.location.replace("/Store/Stores");
但是无法正常工作
非常感谢任何帮助
非常感谢
答案 0 :(得分:24)
您可以使用javascript重定向到新页面。将window.location.href
的值设置为ajax调用的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
帮助器方法为action方法构建正确的相对url。如果你的javascript代码在外部javascript文件中,你应该为app root构建url并将其传递给外部js文件中的脚本/代码,并使用它来构建动作方法的url,如{{3}中所述}。
传递参数?
如果要将一些查询字符串参数传递给新网址,可以使用接受路由值的Url.Action
方法的this post来构建包含查询字符串的网址。
var newUrl = '@Url.Action("Stores","Store", new { productId=2, categoryId=5 })';
其中2和5可以替换为其他一些实际值。
由于这是一个html辅助方法,它只能在你的剃刀视图中工作,而不能在外部js文件中工作。如果您的代码在外部js文件中,则需要手动构建url查询字符串参数。
最好使用mvc helper方法为action方法生成正确的url。从你的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
}
});
答案 1 :(得分:7)
在行动中你可以这样写:
if(Request.IsAjaxRequest()) {
return JavaScript("document.location.replace('"+Url.Action("Action", new { ... })+"');"); // (url should be encoded...)
} else {
return RedirectToAction("Action", new { ... });
}
答案 2 :(得分:2)
尝试
window.location = "/Store/Stores";
相反。