Rediriger vers Action dans un autre contrôleur

124

J'ai deux contrôleurs, tous deux appelés AccountController. L'un d'eux, appelons-le Controller A, est dans un Areaappelé Adminet l'autre, appelons-le Controller B, n'est dans aucun Area(je suppose que cela signifie que c'est dans la valeur par défaut Area?). Controller Ba un action methodappelé Login. J'ai un action methodin Controller A, qui a cette ligne

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

Le problème est que j'obtiens un 404lorsque cette ligne est exécutée car une tentative de redirection vers un actionin Controller A. Je veux appeler le action methoddans Controller B. Est-ce possible?

Sachin Kainth
la source
2
duplication possible de la redirection MVC vers l'index d'un autre contrôleur
musefan

Réponses:

236

Vous pouvez fournir le areadans le routeValuesparamètre. Essaye ça:

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

Ou

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

en fonction de la zone que vous visez.

Rory McCrossan
la source
Et si je veux passer d'une vue dans une certaine zone à l'action d'un contrôleur qui n'est dans aucune zone. Comme dans MVC5, le bouton LogOff en haut à droite se trouve dans AccountController, qui ne réside dans aucune zone. Et je veux me déconnecter d'une vue dans une certaine zone ???
Awais Mahmood
1
Mon deuxième exemple, area = ""fera cela pour vous.
Rory McCrossan
Cela a fonctionné pour moi avec ASP.NET Core .... Lorsque j'ai mis à niveau vers la dernière version, RedirectToAction est tombé en panne et je l'ai fait fonctionner en utilisant la zone = "" avec une chaîne vide.
Jonathan Alfaro
28

Utilisez ceci:

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

Cela redirigera vers l' LogInaction dans le Accountcontrôleur dans la zone "globale".

Il utilise cette RedirectToActionsurcharge:

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

MSDN

gdoron soutient Monica
la source
9

Vous pouvez utiliser ceci:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });
Muhammad Awais
la source
2

Utilisez ceci:

    return this.RedirectToAction<AccountController>(m => m.LogIn());
Hiren Patel
la source
1
J'aime le concept. J'ai toujours détesté la partie chaîne de RedirectToAction et j'ai pensé qu'elle devrait ressembler davantage à ce que vous avez entré, mais cela semble mettre en colère c #. Est-ce dans des frameworks plus récents que 4.6.2?
user3071434
@ user3071434 Non, vous pouvez utiliser avec l'ajout de "using Microsoft.Web.Mvc". vous pouvez éviter une partie de chaîne et réduire à une erreur lors de l'exécution en raison du mauvais texte d'action
Hiren Patel
0

Essayez de les changer:

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

Je l'ai essayé et cela a fonctionné.

Raymond Irani
la source