【问题标题】:Redirect FROM controller AFTER Ajax call (including parameters)在 Ajax 调用之后重定向 FROM 控制器(包括参数)
【发布时间】:2013-08-21 03:00:43
【问题描述】:

所以,我有一个小问题,我想知道是否有可能通过以下方式解决它,我知道还有其他方法可以解决这个问题,但我想知道是否有可能像这样解决它:

我有一个 ajax 调用,一个 GET。在这个 ajax 调用中,我只想根据用户输入(通过 javascript)传递一些参数,并让控制器操作处理其余的。问题在于,对于 ajax,success 函数负责操作完成后发生的任何事情。

我的操作有一个重定向(ActionResult 它返回一个带有一些参数的视图),我想让控制器在这里重定向我,但是 ajax 使用 Success 函数启动。

如何将完整路径(由于它基于用户输入而可以更改)传递给成功函数以进行重定向?

谢谢!

 public string Edit(string stringEventID)
    {
        Guid eventID = new Guid(stringEventID);

        if (eventID == Guid.Empty || eventID == null)
        {
            return Url.Action("Edit", "MyController", new { area = "MyArea", id = new Event() });
        }

        else
        {
            Event _event = _iEMARepository.Events.Where(p => p.EventID == eventID).SingleOrDefault();

            return Url.Action("Edit", "MyController", new { area = "MyArea", id = _event })
        }
    }

【问题讨论】:

  • 我的问题不在于请求是否成功,我希望控制器重定向,无论如何。但网址不会相同,它取决于用户输入。之后如何返回完整路径并通过 window.location.href 重定向

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


【解决方案1】:

使用 Url 帮助器为 MVC 和您的路由正确构建 URL。然后返回带有 URL 的Jsonresult(您可能需要设置 AllowGet):

string url = Url.Action(your arguments here);

return new JsonResult()
{
    JsonRequestBehavior = JsonRequestBehavior.AllowGet,
    Data = new Dictionary<string,string>() { { "url", url } }
};

比使用success函数中的url触发重定向:

success: function (data) {
    window.location.href = JSON.parse(data)['url'];
}

【讨论】:

  • 返回一个字符串肯定可以解决问题。我只是想知道 javascript 如何处理 URL,因为我知道它与 MVC 处理它们的方式不同。
  • 我只是想知道在这种情况下我是否可以“跳过”成功功能,或者根本不使用 ajax(我相信最后一个不起作用,因为我基于重定向用户输入,因此需要将参数发送到控制器)
  • 正确,您肯定需要调用服务器来构建 URL。您将希望实际使用成功函数,因为如果服务器上出现错误或 ajax 调用出现问题,您可能不想重定向。
  • 是的,如果这看起来是一个愚蠢的问题,我很抱歉,但是我必须从头开始构造字符串吗?与 StringBuilder 一样,所以我可以在末尾(参数)添加一个 {0}?
  • 是的,我相信这就是您想要做的。 ajax 调用返回 URL 的一个操作和该 URL 将调用的另一个操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
相关资源
最近更新 更多