Como redirecionar para o Index de outro controlador?


129

Eu tenho procurado através de tentar encontrar uma maneira de redirecionar para uma Indexvisão de outro controlador.

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

Isto é o que eu tentei agora. Agora, o código que me foi dado também tem um ActionLinklink para a página que eu preciso Redirect.

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

Respostas:


272

Use as sobrecargas que levam o nome do controlador também ...

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

e

@Html.ActionLink("Link Name","Index", "MyController", null, null)

3
Ok, isso funcionou. Eu tentei isso antes deve ter sido um erro de digitação quando eu fiz isso antes.
— cjohnson2136

2
fez isso faria de mais cedo, mas havia um temporizador parar-me
— cjohnson2136

Ahh, para nós, iniciantes no MVC, isso foi extremamente útil. Simplesmente, o redirecionamento para outra visualização em uma pasta diferente, representada por um controlador diferente, estava recebendo por mim até que eu li isso.
— Atletway

como redirecionar para uma visão sem um controlador? comoShared/Error
— Dylan Czenski

28

experimentar:

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

e .cshtmltendo em vista:

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

OU:

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

OU:

@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 */ })

Observe que o uso nullna expressão final não é recomendado e é melhor usar um espaço new {}em branco em vez denull


3
Em relação ao seu aviso, por que razão é melhor usá-lo em new {}vez de null?
— Musefan

16

Você pode usar o seguinte código:

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

Consulte RedirectToAction


Eu tentei isso e não funcionou. Deu-me que a página não pôde ser encontrada com erro
— cjohnson2136 25/10

deve estar com "Controller": return RedirectToAction("Index", "Home");
— Hiraeth

Eu preciso usar "/ Index" caso contrário não foi encontrado
— code4j 8/17/17

@ code4j como você definiu suas rotas padrão? Você adicionou valores padrão para controlador e ação?
— Wouter de Kort

2

Você pode usar o método sobrecargas RedirectToAction(string actionName, string controllerName);

Exemplo:

RedirectToAction(nameof(HomeController.Index), "Home");

1

Você pode usar o redirecionamento local. Os códigos a seguir estão saltando na página Índice do HomeController:

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

            return View();
        }
}

0

Resposta completa (.Net Core 3.1)

A maioria das respostas aqui estão corretas, mas são um pouco fora de contexto; portanto, fornecerei uma resposta completa que funciona para o Asp.Net Core 3.1. Por uma questão de completude:

[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"
    }
}

Se você tentar usar qualquer uma das seqüências específicas de URL, por exemplo "some_health_url", não funcionará!

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.