首页 > 解决方案 > ASP.NET MVC 5 应用程序 - 如何在 ajax 发布后重定向到 URL?

问题描述

我试图在 ajax 发布成功后将用户重定向到一个页面。session 变量确实发生了变化,但之后它永远不会重定向。

控制器:

[HttpPost]
public ActionResult SelectFacility(string Facility)
{
    System.Web.HttpContext.Current.Session["Facility"] = Facility;
    return Json(new { redirectToUrl = Url.Action("Index", "Incident") });
}

Javascript

$("#Facility").on("change", function () {
        var fac = $(this).find("option:selected").text();
        /*
        $.post("/Incident/SelectFacility", {
            Facility: fac
        });
        window.location = result.redirectUrl;*/

        $.ajax({
            url: '@Url.Action("SelectFacility","Incident")',
            type: 'POST',
            //contentType: 'application/json', not needed
            //dataType: 'jsonp', jsonp is for sending to a site other than the current one
            data: {
                Facility: fac
            },
            success: function (result) {
                if (result == true) {
                    window.location = result.redirectUrl;
                }
            }
        });
    });

标签: jqueryajaxasp.net-mvc

解决方案


首先result将持有一个对象,因此将其与它进行比较true是相当奇怪的(尽管由于类型强制而实际上在这里工作)。

其次,您的逻辑的主要问题是您正在检查redirectUrl响应的属性,但正确的名称是redirectToUrl.

success: function(result) {
  window.location = result.redirectToUrl;
}

但是,值得注意的是,在这种情况下,AJAX 请求是完全多余的,因为您在页面完成后立即重定向页面。


推荐阅读