ajax调用后MVC3重定向到动作

在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") 。 但它没有用

我还尝试添加window.location.replace("/Store/Stores"); 在ajax调用的完整function,但也没有工作

任何帮助是极大的赞赏

非常感谢

您可以使用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帮助器方法为action方法构建正确的相对url。 如果你的javascript代码在一个外部javascript文件中,你应该建立应用程序根目录的url并将其传递给外部js文件中的脚本/代码,并使用它来构建操作方法的url,如本文所述。

传递参数?

如果你想将一些查询字符串参数传递给新的url,你可以使用Url.Action方法的这个重载 ,它接受routevalues以及使用查询字符串构建url。

 var newUrl = '@Url.Action("Stores","Store", new { productId=2, categoryId=5 })'; 

其中2和5可以用其他一些实际值替换。

由于这是一个html辅助方法,它只能在你的剃刀视图中工作,而不能在外部js文件中工作。 如果您的代码在外部js文件中,则需要手动构建url querystring参数。

在服务器端生成新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 } }); 

在行动中你可以这样写:

 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"; 

代替。