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


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



2

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

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

1
Мне нравится концепция. Я всегда ненавидел строковую часть RedirectToAction и думал, что она должна быть больше похожа на то, что вы ввели, но это, похоже, разозлило C #. Это в фреймворках новее 4.6.2?
user3071434

@ user3071434 Нет, вы можете использовать с добавлением «using Microsoft.Web.Mvc». вы можете избежать строковой части и свести к
Hiren Patel

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.