为什么我的AJAX帖子会重定向到正确的ActionResult

时间:2014-10-08 14:22:10

标签: javascript c# ajax asp.net-mvc asp.net-mvc-4

这么简单的设置,我知道我在这里错过了一些愚蠢的东西。

JS:

$("#Affiliate").change(function () {
                var selectedItem = $(this).val();
                $.ajax({
                    cache: false,
                    type: "POST",
                    url: "@(Url.Action("ChangeOrg", "ScheduleStatistic"))",
                    data: { "organazation": selectedItem }
                });
            });

查看:

<select id="Affiliate" class="form_select" style="z-index: 3000; width: 100%;">
                                    <option value="Org1">Foo</option>
                                    <option value="Org2">Bar</option>

控制器:

 public ActionResult ChangeOrg(string organazation)
    {
        switch (organazation)
        {
            case "Org1":
                return RedirectToAction("Index", new { orgURL = "URL_Org1" });
                break;
            case "Org2":
                return RedirectToAction("Index", new { orgURL = "URL_Org2" });
                break;

            default:
                return this.View();
        }

    }

然而,当它到达那个动作结果时...它永远不会执行redirectToAction但是如果我输入URL&#34; Localhost / ChangeOrg?Organazation = Org1&#34;它正确地去了那里。有什么想法吗?

2 个答案:

答案 0 :(得分:3)

服务器端重定向实际上是通过客户端访问完成的。重定向与ajax请求无关,因此浏览器永远不会调用重定向的URL。

Index行动的假设结果是什么,以及如何在ajax的succes上使用它?

根据您的真实需要,这可能对您有用:

public ActionResult ChangeOrg(string organazation)
{
    switch (organazation)
    {
        case "Org1":
            return Index("URL_Org1");
            break;
        case "Org2":
            return Index("URL_Org2");
            break;

        default:
            return this.View();
    }

}

<强>更新

如果在Affiliate值更改时应将用户重定向到其他页面,则您不需要ajax

$("#Affiliate").change(function () {
  var selectedItem = $(this).val();
  var url = "@(Url.Action("ChangeOrg", "ScheduleStatistic"))?organazation=" + selectedItem,
  window.location.assign(url);
});

答案 1 :(得分:0)

ajax不会重定向。要重定向,您需要在ajax调用

上成功
$.ajax({
    cache: false,
    type: "POST",
    url: "@(Url.Action("ChangeOrg", "ScheduleStatistic"))",
    data: { "organazation": selectedItem }
    success: function(result){
        if(result.Success){
            window.location = "@Url.Action(newaction, newcontroller)"
        }
    }
});