Перенаправлення на дії в іншому контролері


124

У мене є два контролери, обидва викликані AccountController. Один з них, дозволяє назвати його Controller A, знаходиться в Areaназивається Adminі з іншого боку , дозволяє назвати його Controller B, не в якійсь - або Area(я припускаю , що означає , що він в за замовчуванням Area?). Controller Bмає action methodпокликаний Login. У мене є action methodін Controller A, який має цей рядок

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

Проблема полягає в тому, що я отримую, 404коли ця лінія виконується через те, що робиться спроба перенаправити на неіснуючу actionв Controller A. Я хочу зателефонувати action methodв Controller B. Чи можливо це?


Відповіді:


236

Ви можете поставити areaвrouteValues параметрі. Спробуйте це:

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

Або

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

залежно від того, для якої області ви прагнете.


що робити, якщо я хочу перейти від перегляду в певній області до дії контролера, якого немає в будь-якій області. Як і в MVC5, кнопка LogOff вгорі праворуч знаходиться в AccountController, яка не знаходиться в будь-якій області. І я хочу LogOff з виду в певній області ???
Awais Mahmood

1
Мій другий приклад, area = ""зробить це за вас.
Рорі Маккросан

Це працювало для мене з ASP.NET Core .... Коли я оновив до останньої версії, RedirectToAction зламався, і я змусив його працювати, використовуючи область = "" з порожнім рядком.
Джонатан Альфаро

28

Використовуй це:

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

Це перенаправить на LogInдії вAccount контролері в "глобальній" області.

Він використовує це RedirectToActionперевантаження:

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

MSDN



2

Використовуй це:

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

1
Мені подобається концепція. Я завжди ненавидів рядкову частину RedirectToAction і вважав, що вона повинна більше нагадувати те, що ви ввели, але це, мабуть, викликає гнів c #. Чи це в рамках новіше, ніж 4.6.2?
користувач3071434

@ user3071434 Ні, ви можете використовувати додавання "використання Microsoft.Web.Mvc". ви можете уникнути рядкової частини та зменшити отримання помилки під час виконання через неправильний текст дії
Hiren Patel

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.