Перенаправить на действие в другом контроллере

124

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

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

Проблема в том, что я получаю сообщение, 404когда эта строка запускается, потому что делается попытка перенаправить на несуществующий actionin Controller A. Я хочу , чтобы позвонить action methodпо прибытию Controller B. Это возможно?

Сачин Каинт
источник

Ответы:

238

Вы можете указать areaв routeValuesпараметре. Попробуй это:

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

Или

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

в зависимости от того, в какую область вы нацелены.

Рори МакКроссан
источник
что, если я хочу перейти от представления в определенной области к действию контроллера, которого нет в какой-либо области. Как и в MVC5, кнопка выхода из системы в правом верхнем углу находится в AccountController, который не находится в какой-либо области. И я хочу выйти из вида в определенной области ???
Аваис Махмуд,
1
Мой второй пример area = ""сделает это за вас.
Рори МакКроссан,
У меня это сработало с ASP.NET Core .... Когда я обновился до последней версии, RedirectToAction сломался, и я заставил его работать, используя area = "" с пустой строкой.
Джонатан Альфаро
28

Использовать это:

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

Это перенаправит на LogInдействие в Accountконтроллере в «глобальной» области.

Он использует эту RedirectToActionперегрузку:

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

MSDN

gdoron поддерживает Монику
источник
9

Вы можете использовать это:

return RedirectToAction("actionName", "controllerName", new { area = "Admin" });
Мухаммад Авайс
источник
2

Использовать это:

    return this.RedirectToAction<AccountController>(m => m.LogIn());
Хирен Патель
источник
1
Мне нравится концепция. Я всегда ненавидел строковую часть RedirectToAction и думал, что она должна быть больше похожа на то, что вы ввели, но это, похоже, разозлило C #. Это в фреймворках новее 4.6.2?
user3071434
@ user3071434 Нет, вы можете использовать с добавлением «using Microsoft.Web.Mvc». вы можете избежать строковой части и свести к
Hiren Patel
0

Попробуйте переключить их:

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

Я попробовал, и это сработало.

Раймонд Ирани
источник