143

我有两个控制器,都称为AccountController. 其中一个,让我们调用它Controller A,在被Area调用Admin中,另一个,让我们调用它Controller B,不在任何Area(我猜这意味着它在默认值Area?)。 Controller B有一个action methodLogin. 我有一个action methodin Controller A,它有这条线

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

问题是我404在执行此行时得到一个,因为尝试重定向到不存在actionController A. 我想打电话给action methodController B这可能吗?

4

7 回答 7

263

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

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

或者

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

取决于你瞄准的区域。

于 2012-05-28T13:13:34.527 回答
30

用这个:

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

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

它正在使用这个RedirectToAction重载:

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

MSDN

于 2012-05-28T13:15:03.837 回答
10

你可以使用这个:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });
于 2018-04-01T15:21:16.527 回答
2

用这个:

    return this.RedirectToAction<AccountController>(m => m.LogIn());
于 2019-03-22T08:14:55.620 回答
1

RedirectToRoute()也可用。此外,更好的方法可能是使用 nameof(),这样您就可以避免在代码库中硬编码字符串。

return RedirectToRoute(nameof(AccountController) + nameof(AccountController.Login));

而且,如果您要重定向到接受参数的端点,请将这些传递。

return RedirectToRoute(nameof(Account) + nameof(Account.ChangePassword), new { id = id });
于 2021-07-07T16:20:58.163 回答
0

尝试切换它们:

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

我试过了,它奏效了。

于 2020-07-06T07:08:44.717 回答
0

这应该工作

return RedirectToAction("actionName", "controllerName", null);
于 2021-01-25T15:34:00.983 回答