Redirect to Action in another controller

391.6k views Asked by At

I have two controllers, both called AccountController. One of them, lets call it Controller A, is in an Area called Admin and the other, lets call it Controller B, is not in any Area (I guess that means it's in the default Area?). Controller B has an action method called Login. I have an action method in Controller A, which has this line

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

The problem is that I get a 404 when this line gets executed because an attempt is made to redirect to a non-existent action in Controller A. I want to call the action method in Controller B. Is this possible?

8

There are 8 answers

3
Rory McCrossan On BEST ANSWER

You can supply the area in the routeValues parameter. Try this:

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

Or

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

depending on which area you're aiming for.

0
gdoron On

Use this:

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

This will redirect to the LogIn action in the Account controller in the "global" area.

It's using this RedirectToAction overload:

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

MSDN

0
Kazeem Quadri On

This should work

return RedirectToAction("actionName", "controllerName", null);
1
Linju On

RedirectToRoute() is also available. Also, a better way to do it might be using nameof() so you can avoid hardcoding strings in your codebase.

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

And, if you are redirecting to an endpoint that takes parameters, pass those along.

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

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

3
Hiren Patel On

Use this:

    return this.RedirectToAction<AccountController>(m => m.LogIn());
0
Muhammad Awais On

You can use this:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });
0
Raymond Irani On

Try switching them:

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

I tried it and it worked.