您可以使用 javascript 重定向到新页面。window.location.href
在 ajax 调用的success
/complete
事件中将值设置为新的 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 到 action 方法。如果您的 javascript 代码位于外部 javascript 文件中,您应该将 url 构建到应用程序根目录并将其传递给外部 js 文件中的脚本/代码,并使用它来构建操作方法的 url,如本文所述。
传递参数?
如果你想将一些查询字符串参数传递给新的 url,你可以使用这个方法的重载,Url.Action
它也接受路由值来构建带有查询字符串的 url。
var newUrl = '@Url.Action("Stores","Store", new { productId=2, categoryId=5 })';
其中 2 和 5 可以替换为其他一些实数值。
由于这是一个 html 辅助方法,它只能在您的 razor 视图中工作,而不是在外部 js 文件中。如果您的代码在外部 js 文件中,则需要手动构建 url 查询字符串参数。
在服务器端生成新的 url
使用 mvc 辅助方法为 action 方法生成正确的 url 总是一个好主意。从您的操作方法中,您可以返回一个 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
}
});