Redirecionar para ação em outro controlador


124

Eu tenho dois controladores, ambos chamados AccountController. Um deles, vamos chamá-lo Controller A, está em um Areachamado Admine o outro, vamos chamá-lo Controller B, não está em nenhum Area(acho que isso significa que está no padrão Area?). Controller Btem um action methodchamado Login. Eu tenho um action methoddentro Controller A, que tem esta linha

return RedirectToAction("LogIn", "Account");

O problema é que eu recebo um 404quando esta linha é executada, porque é feita uma tentativa de redirecionar a uma inexistente actionem Controller A. Eu quero chamar o action methodno Controller B. Isso é possível?


Respostas:


235

Você pode fornecer areao routeValuesparâmetro Tente o seguinte:

return RedirectToAction("LogIn", "Account", new { area = "Admin" });

Ou

return RedirectToAction("LogIn", "Account", new { area = "" });

dependendo da área que você deseja.


e se eu quiser passar de uma visualização em uma determinada área para a ação de um controlador que não está em nenhuma área. Como no MVC5, o botão LogOff no canto superior direito está no AccountController, que não reside em nenhuma área. E eu quero LogOff de uma visão em uma determinada área ??
Awais Mahmood

1
Meu segundo exemplo area = "",, fará isso por você.
Rory McCrossan 26/10/2015

Isso funcionou para mim com o ASP.NET Core .... Quando atualizei para a versão mais recente, o RedirectToAction quebrou e o fiz funcionar usando a area = "" com uma string vazia.
Jonathan Alfaro

28

Usa isto:

return RedirectToAction("LogIn", "Account", new { area = "" });

Isso será redirecionado para a LogInação no Accountcontrolador na área "global".

Está usando essa RedirectToActionsobrecarga:

protected internal RedirectToRouteResult RedirectToAction(
    string actionName,
    string controllerName,
    Object routeValues
)

MSDN


9

Você pode usar isto:

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

2

Usa isto:

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

1
Eu gosto do conceito. Eu sempre odiei a parte da string de RedirectToAction e pensei que deveria ser mais parecida com o que você inseriu, mas isso parece irritar c #. Isso está nas estruturas mais recentes que o 4.6.2?
User3071434

@ user3071434 Não, você pode usar adicionando "using Microsoft.Web.Mvc". você pode evitar parte de cordas e reduzir para a obtenção de um erro em tempo de execução devido ao texto Ação errado
Hiren Patel

0

Tente trocá-los:

return RedirectToAction("Account", "Login");

Eu tentei e funcionou.

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.