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.