【问题标题】:ASP.Net MVC AJAX call returns to original actionMethod instead of new url [duplicate]ASP.Net MVC AJAX 调用返回原始 actionMethod 而不是新 url [重复]
【发布时间】:2015-03-13 04:56:55
【问题描述】:

我正在尝试做的事情可能吗?似乎应该如此。 我希望看到 MyActionMethod 继续使用新的 url,但它最终会再次被调用。

我已对此进行了简化以深入了解其本质。我的操作方法是从带有 Ajax.BeginForm() 的视图中调用的,一旦提交,我会看到它在控制器中到达这里。

public ActionResult MyActionMethod(MyViewModel myViewModel)
    {
        isRedirectNeeded = true;
        return RedirectIfNeeded(isRedirectNeeded)   
    }

我的方法来确定重定向到哪里。我有一个方法,因为它被调用了几次,并且比本示例中的目的地更多。

  private ActionResult RedirectIfNeeded(bool isRedirectNeeded)
    {
        if (isRedirectNeeded)
        {
            return Redirect(@"~/myController/MyMethod"); 
        }
        else 
        {
            return Json("<div class='alert alert-error'>" + errorMessage + "</div>");
        }
    }

我可以单步调试调试器,观察它转到 MyActionMethod,跳转到 redirectIfNeeded 方法,找出要使用的正确重定向 url,然后返回。但我没有转到新的 url,而是回到了 MyActionMethod。这是怎么回事?

我不允许发布实际代码。

新信息:我通过 MyActionMethod 中的返回,看到它进入 global.asax 并点击:(它足够通用,我正在发布实际代码)

    protected void Application_EndRequest()
    {
        var context = new HttpContextWrapper(Context);
        if (context.Request.IsAjaxRequest() && context.Response.StatusCode == 302)
        {
            Context.Response.Clear();
            Context.Response.Write("**custom error message**");
            Context.Response.StatusCode = 401;
        }
    }

我现在正在谷歌上搜索,但想把这些信息发布出来,这样你们就可以了解我所做的所有信息

答案在上面重复评论中提到的问题中。

【问题讨论】:

  • 在使用ajax时不能这样重定向,需要将url作为json返回并使用javascript重定向
  • 我相信在这种情况下发送 http 状态代码并在 javascript 中进行相应的行为是很好的做法。 stackoverflow.com/a/20975397/1505865
  • 感谢@Erik Funkenbush,当我第一次写这个问题时,我没有意识到这是一个AJAX问题。

标签: c# asp.net-mvc


【解决方案1】:

你需要使用 return RedirectToAction();重定向到不同的操作

【讨论】:

  • 我不会重定向到其他操作。 “RedirectIfNeeded()”只是控制器中返回 ActionResult 的私有方法。
猜你喜欢
  • 2019-04-15
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
  • 2016-01-07
  • 2010-11-11
相关资源
最近更新 更多