¿Cómo redirigir a Index desde otro controlador?

129

He estado buscando intentando encontrar alguna forma de redirigir a una Indexvista desde otro controlador.

public ActionResult Index()
{                
     ApplicationController viewModel = new ApplicationController();
     return RedirectToAction("Index", viewModel);
}

Esto es lo que intenté en este momento. Ahora el código que me dieron tiene un ActionLinkenlace a la página que también necesito Redirect.

@Html.ActionLink("Bally Applications","../Application")
cjohnson2136
fuente

Respuestas:

272

Utilice las sobrecargas que también toman el nombre del controlador ...

return RedirectToAction("Index", "MyController");

y

@Html.ActionLink("Link Name","Index", "MyController", null, null)
musefan
fuente
3
Ok esto funcionó. Intenté esto anteriormente debe haber sido un error tipográfico cuando lo hice antes.
cjohnson2136
2
hizo que lo haría de antes, pero había un temporizador me detiene
cjohnson2136
Ahh, para nosotros los novatos de MVC esto fue extremadamente útil. Simplemente redireccioné a otra vista en una carpeta diferente representada por un controlador diferente que recibí hasta que leí esto.
atconway
¿Cómo redirigir a una vista sin un controlador? tales comoShared/Error
Dylan Czenski
28

tratar:

public ActionResult Index() {
    return RedirectToAction("actionName");
    // or
    return RedirectToAction("actionName", "controllerName");
    // or
    return RedirectToAction("actionName", "controllerName", new {/* routeValues, for example: */ id = 5 });
}

y a la .cshtmlvista:

@Html.ActionLink("linkText","actionName")

O:

@Html.ActionLink("linkText","actionName","controllerName")

O:

@Html.ActionLink("linkText", "actionName", "controllerName", 
    new { /* routeValues forexample: id = 6 or leave blank or use null */ }, 
    new { /* htmlAttributes forexample: @class = "my-class" or leave blank or use null */ })

Aviso usando nullno se recomienda en la expresión final, y es mejor utilizar un espacio en blanco new {}en lugar denull

ravy amiry
fuente
3
Con respecto a su aviso, ¿por qué razón es mejor usarlo en new {}lugar de null?
musefan
16

Puedes usar el siguiente código:

return RedirectToAction("Index", "Home");

Ver RedirectToAction

Wouter de Kort
fuente
Lo intenté y no funcionó. Me dio error de página no se pudo encontrar
cjohnson2136
debería estar con "Controlador": return RedirectToAction("Index", "Home");
Hiraeth
Necesito usar "/ Index", de lo contrario no se encuentra
code4j
@ code4j ¿cómo ha definido sus rutas predeterminadas? ¿Ha agregado valores predeterminados para el controlador y la acción?
Wouter de Kort
2

Puedes usar el método de sobrecargas RedirectToAction(string actionName, string controllerName);

Ejemplo:

RedirectToAction(nameof(HomeController.Index), "Home");
A. Lipnitskiy
fuente
1

Puede usar la redirección local. Los siguientes códigos saltan a la página de índice de HomeController:

public class SharedController : Controller
    {
        // GET: /<controller>/
        public IActionResult _Layout(string btnLogout)
        {
            if (btnLogout != null)
            {
                return LocalRedirect("~/Index");
            }

            return View();
        }
}
Hasan Tuna Oruç
fuente
0

Respuesta completa (.Net Core 3.1)

La mayoría de las respuestas aquí son correctas, pero están un poco fuera de contexto, por lo que proporcionaré una respuesta completa que funciona para Asp.Net Core 3.1. Por completo:

[Route("health")]
[ApiController]
public class HealthController : Controller
{
    [HttpGet("some_health_url")]
    public ActionResult SomeHealthMethod() {}
}

[Route("v2")]
[ApiController]
public class V2Controller : Controller
{
    [HttpGet("some_url")]
    public ActionResult SomeV2Method()
    {
        return RedirectToAction("SomeHealthMethod", "Health"); // omit "Controller"
    }
}

Si intenta utilizar cualquiera de las cadenas específicas de URL, por ejemplo "some_health_url", ¡no funcionará!

ワ イ き ん ぐ
fuente