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?


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.


¿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


9

Puedes usar esto:

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

2

Utilizar este:

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

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ó.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.