RedirectToAction 根本不起作用

Posted

技术标签:

【中文标题】RedirectToAction 根本不起作用【英文标题】:RedirectToAction not working at all 【发布时间】:2012-01-10 15:47:44 【问题描述】:

在AccountController中,我有一个方法的结尾:

RedirectToAction("EveryView", "Account");

在同一个控制器文件中我有这个方法:

public ActionResult EveryView()
    
        return View();
    

但是这个方法永远不会被调用。我在“”上有一个断点,它永远不会被击中!

【问题讨论】:

这可能不是问题,但如果它在同一个Controller 内,您可以使用RedirectToAction("EveryView"); @Rondel 我试过了,没关系。 你只有RedirectToAction()吗?或return RedirectToAction(...)。我试过了,return 效果很好。 您在Action 上是否有任何属性,例如[HttpPost] 或其他任何东西?当它到达RedirectToAction 时,您是否会遇到任何错误,或者它只是什么都不做。 @Srcee 它必须返回 ActionResult 才能返回视图。 【参考方案1】:

你已经输入了'return',否则它不会重定向。

return RedirectToAction("EveryView", "Account");

【讨论】:

好接!这简直要了我的命。因为代码仍在运行,只是完全通过了 RedirectToAction 行而没有崩溃!!!很难调试和实现...谢谢 我遇到了完全相同的问题。很容易错过,屏幕上没有错误消息。只是我们需要记住的东西,在开头添加“return”。 啊啊啊!我欠你 5 英镑的 Bonanza。 好接 :) 这是一个很好的答案,谢谢。但是,您能否提供解释此行为的参考资料?即“为什么”我们必须“返回” - 为什么名为“重定向”的东西不能?【参考方案2】:

嗯……很难看出(或说出)问题所在,因为代码看起来很简单。

也许稍微调试一下可能会有所帮助! 尝试在默认的 Index() ActionResult 中创建一个新的 TestController,这样做:

return RedirectToAction("EveryView", "Test");

然后,创建 EveryView() ActionResult 方法并设置断点。

public ActionResult EveryView()

    return View();

如果您尝试http://localhost/Test/Index 会发生什么?有用吗?

如果这不起作用,也许您可​​能想查看您的 Routes 并确保您没有定义可能使事情中断的特殊 Routes。

或者,您可以在 Global.asax 中添加此方法:

protected void Application_Error(object sender, EventArgs e)

    Exception ex = Server.GetLastError();

并在该行设置断点以捕获任何未知错误。

【讨论】:

我遇到了同样的问题,在我的情况下是错误,所以我按照 Global.asax 文件中的@Vlince 建议对其进行了调试,我得到了错误【参考方案3】:

我最近的项目中也遇到了这个问题。我最终通过在重定向操作上添加 [AllowAnonymous] 来解决它,因为控制器装饰有 [Authorize] 属性,此时用户尚未登录。希望这是一个帮助。

【讨论】:

帮助,在 AuthorizeCore 中有一个小错误,派生自/overridden from AuthorizeAttribute..Thnx 我想了解更多关于你是如何克服这个问题的。我的登录页面上也有一个授权标签。当用户登录时。授权是在调用redirectToAction之前制定的。我怀疑这是我的 AuthorizeCore 中的东西。任何示例代码都会是一大优势。提前致谢。【参考方案4】:

我遇到了这个问题,这是因为我添加的自定义 MustBeLoggedIn 过滤器不允许重定向到该方法,类似于 user2192287。

这意味着我的过滤器将我重定向回我开始的操作。

这可能是 petko_stankoski 的问题,因为它在他们的帐户控制器中。

【讨论】:

【参考方案5】:

我遇到了类似的问题。我刚刚从函数中删除了 post 属性 [HttpPost] 到我重定向的位置。

【讨论】:

这使得函数 GET(默认)。这不是一个好的解决方案。 是的,它会起作用,但这不是一个好的解决方案。我希望我的方法是 POST,而不是 GET。我按照 RESTful 原则工作。【参考方案6】:

如果 Action 方法没有被调用,可能是因为该方法已为 HttpPost 注册,但您正在发送 HttpGet 请求。因此,最好使用 [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] 来接受这两个请求的方法

【讨论】:

【参考方案7】:

你必须退货

    public ActionResult Pay(string id)
    
        return RedirectToAction("EveryView", "Account");;
    

【讨论】:

@AdrianMole 和 Hamid Jolany,这只是指出可能的问题还是也提供了解决方案?我说不出来。 “检查事件”只是一种找出方法还是解决方案? (这里没有讽刺,我承认没有足够的技术知识,只是建议改善这给人的印象。)所以请考虑提供更详细的解释和解决方案。 @Yunnosch 我介入只是为了让“修辞问题”成为一个声明。 (正如我在之前标记“不是答案”时被版主“告知”的那样。) @AdrianMole 我明白,我正处于做类似事情的边缘。但我的问题仍然存在。一段代码演示了事件检查并解释了它如何避免绕过。这对我来说显然是一个很有帮助的答案。 @AdrianMole 是的,我也有过类似的经历,其中(在我看来,实际上是更公然的提问)帖子被 NAA 的答案拒绝了。所以现在我非常小心地注意答案中的反问。我仍然认为拒绝标志是错误的,但它教会我的东西实际上很有价值。让我们一起走,伙计。 ;-)【参考方案8】:

注释所有加载的脚本,然后重试。一些脚本被此对象干扰

【讨论】:

以上是关于RedirectToAction 根本不起作用的主要内容,如果未能解决你的问题,请参考以下文章

从另一个网站导航时 RedirectToAction 不起作用

成功的 jquery ajax 发布后 RedirectToAction 不起作用? [复制]

ASP.NET MVC RedirectToAction 在从视图中发布 AJAX 后不起作用

Laravel 路线根本不起作用

使用参数重定向到视图不起作用(ASP.NET Core)

php设置根本不起作用