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?

Sachin Kainth
źródło

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.

Rory McCrossan
źródło
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

gdoron wspiera Monikę
źródło
9

Możesz użyć tego:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });
Muhammad Awais
źródło
2

Użyj tego:

    return this.RedirectToAction<AccountController>(m => m.LogIn());
Hiren Patel
źródło
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.

Raymond Irani
źródło