You*_*sef 17 jquery redirect asp.net-mvc-3
在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 () {
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
我想要的是将项目保存到数据库后我想重定向到另一个视图.(重定向到行动)
我怎样才能做到这一点?
我试着return RedirectToAction("Stores","Store")在SaveItems函数末尾的控制器中使用.但它没有用
我也尝试添加window.location.replace("/Store/Stores");ajax调用的完整功能,但也没有工作
任何帮助是极大的赞赏
非常感谢
Shy*_*yju 25
您可以使用javascript重定向到新页面.window.location.href在ajax调用的success/ completeevent中设置新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!');
}
});
Run Code Online (Sandbox Code Playgroud)
或者在done事件中
$.ajax({
url: someVariableWhichStoresTheValidUrl
}).done(function (r) {
window.location.href = '@Url.Action("Stores","Store")';
});
Run Code Online (Sandbox Code Playgroud)
上面的代码使用Url.Actionhelper方法为action方法构建正确的相对url.如果你的JavaScript代码是一个外部JavaScript文件中,你应该建立链接到应用程序根并传递到内外部的js文件的脚本/代码,并用它来建立的URL操作方法在解释这个职位.
传递参数?
如果要将一些查询字符串参数传递给新网址,可以使用接受路由值的方法的此重载Url.Action以及使用查询字符串构建网址.
var newUrl = '@Url.Action("Stores","Store", new { productId=2, categoryId=5 })';
Run Code Online (Sandbox Code Playgroud)
其中2和5可以用其他一些实际值替换.
由于这是一个html辅助方法,它只能在你的剃刀视图中工作,而不能在外部js文件中工作.如果您的代码在外部js文件中,则需要手动构建url querystring参数.
使用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 });
}
Run Code Online (Sandbox Code Playgroud)
现在在你的ajax调用success/ done回调中,只需检查返回值并根据需要重定向.
.done(function(result){
if(result.status==="success")
{
window.location.href=result.redirectUrl;
}
else
{
// show the error message to user
}
});
Run Code Online (Sandbox Code Playgroud)
小智 7
在行动中你可以这样写:
if(Request.IsAjaxRequest()) {
return JavaScript("document.location.replace('"+Url.Action("Action", new { ... })+"');"); // (url should be encoded...)
} else {
return RedirectToAction("Action", new { ... });
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35151 次 |
| 最近记录: |