Redireccionar a acción en otro controlador

124

Tengo dos controladores, ambos llamados AccountController. Uno de ellos, vamos a llamarlo Controller A, está en una Areallamada Adminy el otro, vamos a llamarlo Controller B, no está en ninguno Area(¿supongo que eso significa que está en el valor predeterminado Area?). Controller Btiene un action methodllamado Login. Tengo una action methoden la Controller Aque tiene esta línea de

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

El problema es que tengo una 404cuando esta línea es ejecutado porque se hace un intento de redirigir a un inexistente actionen Controller A. Quiero llamar a la action methoden Controller B. es posible?

Sachin Kainth
fuente
2
posible duplicado de MVC Redirect to Index desde otro controlador
musefan

Respuestas:

236

Puede suministrar el areaen el routeValuesparámetro. Prueba esto:

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

O

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

dependiendo de a qué área apunta.

Rory McCrossan
fuente
¿Qué pasa si quiero pasar de una vista en un área determinada a la acción de un controlador que no está en ninguna área? Al igual que en MVC5, el botón LogOff en la parte superior derecha está en AccountController, que no reside en ninguna área. ¿Y quiero cerrar sesión desde una vista en un área determinada?
Awais Mahmood
1
Mi segundo ejemplo, area = ""lo hará por ti.
Rory McCrossan
Esto funcionó para mí con ASP.NET Core ... Cuando actualicé a la última versión, RedirectToAction se rompió y lo hice funcionar usando el área = "" con una cadena vacía.
Jonathan Alfaro
28

Utilizar este:

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

Esto redirigirá a la LogInacción en el Accountcontrolador en el área "global".

Está usando esta RedirectToActionsobrecarga:

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

MSDN

gdoron está apoyando a Monica
fuente
9

Puedes usar esto:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });
Muhammad Awais
fuente
2

Utilizar este:

    return this.RedirectToAction<AccountController>(m => m.LogIn());
Hiren Patel
fuente
1
Me gusta el concepto Siempre he odiado la parte de la cadena de RedirectToAction y pensé que debería ser más como lo que ingresaste, pero esto parece enojar a C #. ¿Es esto en marcos más nuevos que 4.6.2?
user3071434
@ user3071434 No, puede usar agregando "usando Microsoft.Web.Mvc". puede evitar la parte de la cadena y reducir a obtener un error en el tiempo de ejecución debido al texto de acción incorrecto
Hiren Patel
0

Intenta cambiarlos:

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

Lo intenté y funcionó.

Raymond Irani
fuente