gpt4 book ai didi

ajax - 通过击倒js中的ajax jQuery调用的MVC RedirectToAction无法正常工作

转载 作者:行者123 更新时间:2023-12-03 23:09:25 25 4
gpt4 key购买 nike

我正在构建一个MVC3 Web应用程序,并且正在使用 knockout 。该应用程序中有两个 View 。 SetUpNewCompany和ManageAccount。要建立新公司,用户首先输入帐号,然后单击搜索。如果帐号已经存在,则用户可以单击按钮以转到ManageAccount View 。在SetUpNewCompanyController中,我使用RedirectToAction方法进行重定向。但是,在ManageAccount中执行Index2操作时,不会显示该 View 。如果输入完整的URL,则会显示该 View 。

SetUpNewCompanyController.cs

[HttpPost]
public RedirectToRouteResult RedirectToManageAccount(string accountNumber)
{
return RedirectToAction("Index2", new RouteValueDictionary(new {controller=
"ManageAccount", companyId = "7e96b930-a786-44dd-8576-052ce608e38f" }));
}

单击按钮时,上面的函数由下面的函数调用
self.redirectToManageAccount = function () {
var accountNumber = "7e96b930-a786-44dd-8576-052ce608e38f";
$.ajax({
type: "POST",
url: "/SetUpNewCompany/RedirectToManageAccount",
data: { accountNumber: accountNumber },
success: function (data) {
},
error: function () {
}
});
}

ManageAccountController.cs
public ActionResult Index2(String companyId)
{
var viewModel = new Models.Index();

List<String> compList = new List<String>();
compList.Add("MyCompany");

List<String> usersList = new List<String>();
usersList.Add("User1");

viewModel.Users = usersList;
viewModel.Companies = compList;
viewModel.CompanyId = companyId;
viewModel.Role = "Role1";

return View("ManageAccount",viewModel);
}

生成的URL是
http://localhost:53897/ManageAccount/Index2?companyId=7e96b930-a786-44dd-8576-
052ce608e38f

Firebug中的控制台窗口显示
GET http://localhost:53897/ManageAccount/Index2?companyId=7e96b930-a786-44dd-8576-
052ce608e38f 200 OK and the spinner keeps spinng

另外,如何获取下面的URL,而不是带有querystring的URL
http://localhost:53897/ManageAccount/Index2/7e96b930-a786-44dd-8576-052ce608e38f

最佳答案

由于您使用AJAX调用RedirectToManageAccount操作方法,因此您有责任自己处理它的响应,并且由于success处理函数为空,因此您实际上将忽略作为响应到达的任何内容。

如果您想从AJAX响应处理程序中强制重定向,建议

  • 如下修改您的操作方法
    [HttpPost]
    public ActionResult RedirectToManageAccount(string accountNumber)
    {
    var redirectUrl = new UrlHelper(Request.RequestContext).Action("Index2", "ManageAccount", new { companyId = "7e96b930-a786-44dd-8576-052ce608e38f" });
    return Json(new { Url = redirectUrl });
    }
  • 以这种方式更新您的AJAX调用
    self.redirectToManageAccount = function () {
    var accountNumber = "7e96b930-a786-44dd-8576-052ce608e38f";
    $.ajax({ type: "POST",
    url: "/SetUpNewCompany/RedirectToManageAccount",
    data: { accountNumber: accountNumber },
    dataType: 'json',
    success: function (response) {
    window.location.href = response.Url;
    },
    error: function () {
    }
    });
    }

  • 至于第二个问题:

    Also, how do I get the URL below instead of the one with querystring http://localhost:53897/ManageAccount/Index2/7e96b930-a786-44dd-8576-052ce608e38f



    您只需要在 RegisterRoutes()函数中为此URL定义适当的路由条目:
    routes.MapRoute(null,
    "ManageAccount/Index2/{companyId}",
    new { controller = "ManageAccount",
    action = "Index2" }
    );

    编辑:由于您的AJAX调用仅用于调用导致重定向的操作方法,因此您可以按照以下方式进行简化,只要此时(在客户端)您已经知道 companyId即可:
    self.redirectToManageAccount = function () {
    var companyId = "12345";
    window.location.href = '@(Html.ActionUri("Index2", "ManageAccount"))?companyId=' + companyId;
    }

    我在哪里使用这种扩展方法
    public static string ActionUri(this HtmlHelper html, string action, string controller)
    {
    return new UrlHelper(html.ViewContext.RequestContext).Action(action, controller);
    }

    关于ajax - 通过击倒js中的ajax jQuery调用的MVC RedirectToAction无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12005954/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com