重定向到另一个控制器中的动作


124

我有两个控制器,都称为AccountController。其中一个,让我们称它为Controller AArea调用Admin,而另一个,让我们称其Controller B为不存在Area(我猜这意味着它处于默认状态Area?)。 Controller B有一个action methodLogin。我有一个action methodin Controller A,其中有此行

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

问题是404执行此行时出现错误消息,因为尝试重定向到中不存在action的行Controller A。我想打电话给action methodController B。这可能吗?


Answers:


235

您可以arearouteValues参数中提供。试试这个:

return RedirectToAction("LogIn", "Account", new { area = "Admin" });

要么

return RedirectToAction("LogIn", "Account", new { area = "" });

根据您要瞄准的区域。


如果我想从某个区域的视图转到不在任何区域的控制器的动作该怎么办?像在MVC5中一样,右上方的LogOff按钮位于AccountController中,该按钮不位于任何区域。我想从某个区域的视图中注销???
阿怀斯·马哈茂德

1
我的第二个示例,area = ""将为您做到这一点。
罗里·麦克罗斯

这在ASP.NET Core上对我有用。
乔纳森·阿尔法罗

28

用这个:

return RedirectToAction("LogIn", "Account", new { area = "" });

这将重定向到LogIn在行动Account中的“全局”区域控制器。

它正在使用此RedirectToAction重载:

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName,
    Object routeValues
)

MSDN



2

用这个:

    return this.RedirectToAction<AccountController>(m => m.LogIn());

1
我喜欢这个概念。我一直讨厌RedirectToAction的字符串部分,并认为它应该更像您输入的内容,但这似乎激怒了C#。是在4.6.2以后的框架中更新吗?
user3071434

@ user3071434不,可以与添加“使用Microsoft.Web.Mvc”一起使用。您可以避免字符串部分,并减少由于错误的操作文本而导致运行时错误的原因
Hiren Patel

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.