In einem anderen Controller zur Aktion umleiten

124

Ich habe zwei Controller, beide angerufen AccountController. Einer von ihnen, nennen wir es Controller A, ist in einem Areaangerufenen Adminund der andere, nennen wir es Controller B, ist in keinem Area(ich denke, das bedeutet, es ist in der Standardeinstellung Area?). Controller Bhat eineaction method angerufen Login. Ich habe ein action methodIn Controller A, das diese Zeile hat

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

Das Problem ist, dass ich eine bekomme, 404wenn diese Zeile ausgeführt wird, weil versucht wird, zu einem nicht existierenden actionin umzuleiten Controller A. Ich möchte das anrufenaction method in Controller B. Ist das möglich?

Sachin Kainth
quelle
2
Mögliches Duplikat von MVC Redirect to Index von einem anderen Controller
Musefan

Antworten:

235

Sie können das areaim routeValuesParameter angeben. Versuche dies:

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

Oder

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

je nachdem, welchen Bereich Sie anstreben.

Rory McCrossan
quelle
Was ist, wenn ich von einer Ansicht in einem bestimmten Bereich zur Aktion eines Controllers wechseln möchte, der sich in keinem Bereich befindet? Wie in MVC5 befindet sich die LogOff-Schaltfläche oben rechts in AccountController, der sich in keinem Bereich befindet. Und ich möchte mich aus einer Sicht in einem bestimmten Bereich abmelden ???
Awais Mahmood
1
Mein zweites Beispiel area = ""wird das für Sie tun.
Rory McCrossan
Dies funktionierte bei mir mit ASP.NET Core .... Als ich auf die neueste Version aktualisiert habe, ist RedirectToAction kaputt gegangen und ich habe es mit dem Bereich = "" mit einer leeren Zeichenfolge zum Laufen gebracht.
Jonathan Alfaro
28

Benutze das:

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

Dies wird zur LogInAktion in der umleitenAccount Steuerung im Bereich "global" .

Es nutzt diese RedirectToActionÜberlastung:

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

MSDN

Gdoron unterstützt Monica
quelle
9

Sie können dies verwenden:

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

Benutze das:

    return this.RedirectToAction<AccountController>(m => m.LogIn());
Hiren Patel
quelle
1
Ich mag das Konzept. Ich habe den String-Teil von RedirectToAction immer gehasst und dachte, er sollte eher dem entsprechen, was Sie eingegeben haben, aber dies scheint c # zu verärgern. Ist dies in Frameworks neuer als 4.6.2?
user3071434
@ user3071434 Nein, Sie können "using Microsoft.Web.Mvc" hinzufügen. Sie können String-Teil vermeiden und reduzieren, um einen Fehler zur Laufzeit aufgrund des falschen Aktionstextes zu bekommen
Hiren Patel
0

Versuchen Sie, sie zu wechseln:

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

Ich habe es versucht und es hat funktioniert.

Raymond Irani
quelle