首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MVC3在ajax调用后重定向到操作

MVC3在ajax调用后重定向到操作
EN

Stack Overflow用户
提问于 2012-04-17 00:28:58
回答 3查看 40.9K关注 0票数 17

在ASP.NET MVC3应用程序中,视图中有一个按钮。

单击该按钮时,将调用一个函数,并进行jquery ajax调用以将项保存到数据库

代码语言:javascript
运行
复制
    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")。但是它不起作用。

我还尝试在ajax调用的完整函数中添加window.location.replace("/Store/Stores");,但也不起作用

非常感谢您的任何帮助。

非常感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-04-17 00:34:50

您可以使用javascript重定向到新页面。在ajax调用的success/complete事件中,将window.location.href的值设置为新的url。

代码语言:javascript
运行
复制
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事件中

代码语言:javascript
运行
复制
$.ajax({      
    url: someVariableWhichStoresTheValidUrl
}).done(function (r) {
     window.location.href = '@Url.Action("Stores","Store")';
});

上面的代码使用Url.Action帮助器方法来构建操作方法的正确相对url。如果你的javascript代码在一个外部的javascript文件中,你应该构建指向应用根目录的url,并将其传递给外部js文件中的脚本/代码,并使用它来构建指向动作方法的url,如this post中所述。

传递参数?

如果你想将一些查询字符串参数传递给新的url,你可以使用Url.Action方法的this overload来构建带有查询字符串的url,该方法也接受routevalue。

代码语言:javascript
运行
复制
var newUrl = '@Url.Action("Stores","Store", new { productId=2, categoryId=5 })';

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

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

在服务器端生成新的url

使用mvc帮助器方法来生成指向操作方法的正确urls始终是一个好主意。从你的action方法中,你可以返回一个json结构体,它有一个新的url被重定向的属性。

您可以在控制器中使用UrlHelper类来完成此操作。

代码语言:javascript
运行
复制
[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回调中,只需检查返回值并根据需要进行重定向。

代码语言:javascript
运行
复制
.done(function(result){
   if(result.status==="success")
   {
      window.location.href=result.redirectUrl;
   }
   else
   {
      // show the error message to user
   }
});
票数 25
EN

Stack Overflow用户

发布于 2014-02-02 20:08:00

实际上,你可以这样写:

代码语言:javascript
运行
复制
if(Request.IsAjaxRequest()) {
    return JavaScript("document.location.replace('"+Url.Action("Action", new { ... })+"');");  // (url should be encoded...)
} else {
    return RedirectToAction("Action", new { ... });
}
票数 8
EN

Stack Overflow用户

发布于 2012-04-17 00:32:10

试一试

代码语言:javascript
运行
复制
window.location = "/Store/Stores";

而不是。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10178007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档