我有一个动作方法,根据传递给它的内容,我想重定向到另一个控制器中的另一个动作。动作和控制器名称是在运行时确定的。
如果我返回 RedirectToAction(),它将强制重定向并更改浏览器中的 URL。我想要的是类似于 TransferToAction() 的东西,它可以将当前请求的处理转移到另一个动作,而无需进行重定向。我似乎记得在早期的预览中有这样的方法,但我似乎无法在 ASP.NET MVC 的 RC 中找到它。
你知道我会怎么做吗?
更新
我添加了以下路线:
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() 应该做什么?我需要传递任何上下文吗?