【问题标题】:Why won't my AJAX post redirect to the correct ActionResult为什么我的 AJAX 帖子不会重定向到正确的 ActionResult
【发布时间】:2014-12-03 06:07:08
【问题描述】:

如此简单的设置,我知道我在这里遗漏了一些愚蠢的东西。

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“Localhost/ChangeOrg?Organazation=Org1”它会正确到达那里。有什么想法吗?

【问题讨论】:

  • 如果你在你的Controller中放了一个断点,organization的值是多少?
  • 我得到正确的返回值,它是“Org1”或“Org2”,具体取决于所选的 DDL。

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


【解决方案1】:

服务器端重定向实际上是通过客户端行完成的。重定向与 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);
});

【讨论】:

  • 所以,我最终需要做的是,根据下拉列表中的选定项目,使用 selectedItem 值的参数将用户重定向到操作 ChangeOrg。例如:如果我在下拉菜单中选择“Foo”,我希望用户重定向到 Localhost/ChangeOrg?Organization=Org1
  • 效果很好!如果我有代表,我会支持你,但我确实标记为正确。非常感谢伊戈尔!
【解决方案2】:

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

【讨论】:

  • 在结果对象中返回重定向 url 也可以,特别是如果它应该像示例代码中那样动态确定。
猜你喜欢
  • 1970-01-01
  • 2017-05-27
  • 1970-01-01
  • 2021-10-17
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-13
相关资源
最近更新 更多