У меня есть метод действия, и в зависимости от того, что ему передано, я хочу перенаправить на другое действие в другом контроллере. Имена действий и контроллеров определяются во время выполнения.
Если я верну RedirectToAction (), это вызовет перенаправление и изменит URL в браузере. То, что я хотел бы, это что-то вроде TransferToAction (), который может перенести обработку текущего запроса в другое действие, без перенаправления. Кажется, я помню метод, ведущий себя так в предыдущих превью, но я не могу найти его в RC ASP.NET MVC.
Вы знаете, как я это сделаю?
UPDATE
Я добавил следующий маршрут:
routes.MapRoute(
"PageRouter",
"{site}/{*url}",
new { controller = "PageRouter",
action = "RoutePage", site = "", url = "" }
);
И действие контроллера PageRouter RoutePage:
public ActionResult RoutePage(string site, string url)
{
var controller = new HomeController {ControllerContext = ControllerContext};
controller.RouteData.Values["controller"] = "Home";
controller.RouteData.Values["action"] = "Index";
return controller.Index(site, url);
}
Мне пришлось установить контроллер и действие в RouteData для представления Home Index, которое будет отображаться. В противном случае он будет искать представление индекса в PageRouterController.
Мне все еще нужно выяснить, как создать контроллер и его действие, зная только их имена. например Я хотел бы иметь возможность просто позвонить примерно так:
public ActionResult RoutePage(string site, string url)
{
return InvokeAction("Home", "Index");
}
Что должно идти в InvokeAction ()? Нужно ли передавать его в каком-либо контексте?