在另一个控制器中重定向到 Action

我有两个控制器,都叫 AccountController。其中一个,我们称之为 Controller A,在一个叫做 AdminArea中,另一个,我们称之为 Controller B,不在任何 Area中(我猜这意味着它在默认的 Area中?).Controller B有一个名为 Loginaction method。我有一个 action methodController A,其中有这条线

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

问题是,当执行这一行时,我得到了一个 404,因为尝试重定向到 Controller A中不存在的 action。我想调用 Controller B中的 action method。这可能吗?

342675 次浏览

您可以在 routeValues参数中提供 area:

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

或者

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

取决于你瞄准的是哪个区域。

用这个:

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

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

它使用 RedirectToAction过载:

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

MSDN

你可以用这个:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });

用这个:

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

试着换一下:

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

我试过了,奏效了。

这个应该可以

return RedirectToAction("actionName", "controllerName", null);

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

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

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

return RedirectToRoute(nameof(Account) + nameof(Account.ChangePassword), new { id = id });