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?


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.


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


9

Sie können dies verwenden:

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

2

Benutze das:

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.