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

时间:2012-05-28 13:11:40

标签: asp.net-mvc asp.net-mvc-3 c#-4.0 redirecttoaction

我有两个控制器,都叫AccountController。其中一个,我们称之为Controller A,位于名为Area的{​​{1}}中,另一个称为Admin,不在任何Controller B中(我想这意味着它是默认的Area?)。 Area有一个名为Controller B的{​​{1}}。我在action method中有一个Login,其中包含此行

action method

问题是,当执行此行时,我得到Controller A,因为尝试重定向到return RedirectToAction("LogIn", "Account"); 中不存在的404。我想拨打action中的Controller A。这可能吗?

7 个答案:

答案 0 :(得分:213)

您可以在area参数中提供routeValues。试试这个:

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

或者

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

取决于您的目标区域。

答案 1 :(得分:24)

使用此:

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

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

正在使用此RedirectToAction重载:

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

MSDN

答案 2 :(得分:6)

您可以使用:

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

答案 3 :(得分:1)

使用此:

var result = dataPage.Where(x => values.Contains(x.udfs.{field}));

答案 4 :(得分:0)

尝试切换它们:

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

我尝试了,并且奏效了。

答案 5 :(得分:0)

这应该有效

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

答案 6 :(得分:0)

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

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

而且,如果您要重定向到带有参数的端点,请将这些参数一起传递。

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