У меня есть Область с именем «Подписчики» и контроллер в этой области с именем «SubscriptionController» с двумя методами открытого действия: Index () и Unsubscribe (), где методу Unsubscribe () передается идентификатор подписчика, т.е. Unsubscribe (int id) )
При определенных обстоятельствах (например, идентификатор недействителен), метод Unsubscribe () выполняет RedirectToAction («Index») для другого действия на том же контроллере.
public ActionResult Index()
{
return View();
}
если я захожу на страницу через '/ Subscribeers / Subscription / Unsubscribe / 999', RedirectToActionMethod () правильно перенаправляет меня на действие Index ().
Я хотел иметь возможность «сокращать» формальный URL ('/ Подписчики / Подписки / Отписаться / 999'), поэтому я добавил маршрут к файлу Global.ascx:
routes.MapRoute(
"Unsubscribe",
"Unsubscribe/{id}",
new {area = "Subscribers", controller = "Subscriptions", action = "Unsubscribe"}
);
Этот маршрут работает правильно, так как он выполняет метод Unsubscribe (), как и ожидалось. У меня проблема в том, что вызовы RedirectToAction («Index») в Unsubscribe () теперь не выполняются, так как они все еще вызывают правильное действие (Index ()), механизм представления теперь игнорирует Area и пытается загрузить представление относительно корень веб-сайта «~ / Views / Subscription / Index.aspx» вместо «~ / Areas / Подписчики / Views / Subscription / Index.aspx»
Я могу исправить это, изменив метод RedirectToAction () в методе Unsubscribe () следующим образом:
return RedirectToAction("Index", "Subscriptions", new { Area = "Subscribers" });
но это кажется громоздким и не очень гибким решением проблемы.
Любой совет или объяснение будет высоко ценится.
Спасибо.