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")
cjohnson2136
fonte

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)
musefan
fonte
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

ruivo amiry
fonte
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

Wouter de Kort
fonte
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");
A. Lipnitskiy
fonte
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();
        }
}
Hasan Atum Oruç
fonte
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á!

ワ イ き ん ぐ
fonte