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?


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.


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


9

Vous pouvez utiliser ceci:

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

2

Utilisez ceci:

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

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é.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.