Przekieruj do akcji w innym kontrolerze


124

Mam dwa kontrolery, oba nazywane AccountController. Jeden z nich, nazwijmy go Controller A, jest w Areawywołaniu, Admina drugi, nazwijmy go Controller B, nie ma w żadnym Area(myślę, że to znaczy, że jest domyślny Area?). Controller Bma action methodwezwanie Login. Mam action methodin Controller A, który ma tę linię

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

Problem polega na tym, że otrzymuję znak, 404gdy ta linia jest wykonywana, ponieważ podejmowana jest próba przekierowania do nieistniejącego actionw Controller A. Chcę wywołać action methodin Controller B. czy to możliwe?


Odpowiedzi:


236

Możesz podać areaw routeValuesparametrze. Spróbuj tego:

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

Lub

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

w zależności od obszaru, do którego celujesz.


co jeśli chcę przejść od widoku w określonym obszarze do działania kontrolera, którego nie ma w żadnym obszarze. Podobnie jak w MVC5, przycisk LogOff w prawym górnym rogu znajduje się w AccountController, który nie znajduje się w żadnym obszarze. I chcę się wylogować z widoku w określonym obszarze ???
Awais Mahmood

1
Mój drugi przykład area = ""zrobi to za Ciebie.
Rory McCrossan

To zadziałało dla mnie z ASP.NET Core .... Po uaktualnieniu do najnowszej wersji RedirectToAction zepsuło się i uruchomiłem go przy użyciu pola area = "" z pustym ciągiem.
Jonathan Alfaro,

28

Użyj tego:

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

Spowoduje to przekierowanie do LogInakcji w Accountkontrolerze w obszarze „globalnym”.

Używa tego RedirectToActionprzeciążenia:

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

MSDN


9

Możesz użyć tego:

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

2

Użyj tego:

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

1
Podoba mi się ta koncepcja. Zawsze nienawidziłem części ciągu RedirectToAction i uważałem, że powinna bardziej przypominać to, co wpisałeś, ale wydaje się, że c # to złość. Czy jest to w frameworkach nowszych niż 4.6.2?
user3071434

@ user3071434 Nie, możesz użyć z dodaniem „using Microsoft.Web.Mvc”. możesz uniknąć części ciągu i zredukować do wystąpienia błędu w czasie wykonywania z powodu niewłaściwego tekstu akcji
Hiren Patel

0

Spróbuj je zmienić:

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

Spróbowałem i zadziałało.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.