问题:
我需要的是类似于 @Html.RenderAction("action","controller") 的东西,但我可以从不同的控制器内部使用。例如:
public class FirstController : Controller
{
public ActionResult GetErDone()
{
return View();
}
}
public class SecondController : Controller
{
public ActionResult Index()
{
ActionResult coolResult =
Helper.GetActionResult("GetErDone", "FirstController");
return View();
}
}
进步:
我已经开始剥离/改革实际的@Html.Action() 方法,但它确实有太多的内部辅助依赖项,我认为这不应该那么难。到目前为止,我所拥有的是:
private void TestCreateActionFromDifferentController(RouteValueDictionary routeValues, string controllerName, string actionName)
{
var httpContext = this.HttpContext;
var routeData = this.RouteData;
routeData.Values["action"] = (object)actionName;
if (!string.IsNullOrEmpty(controllerName))
routeData.Values["controller"] = (object)controllerName;
IController myController = ControllerBuilder.Current.GetControllerFactory().CreateController(new RequestContext(httpContext, routeData) , "staticpages");
}
这当然可以部分工作(减去区域数据令牌等许多缺点),但除了反射之外没有其他方法可以到达MyActionResult
对象。
概括:
在控制器内部时,有什么方法可以从在不同控制器上定义的操作中获取 ActionResult?
更新:
更具体地说,我正在尝试使用 System.Web.Mvc.Html.ChildActionExtensions.ChildActionMvcHandler 之类的东西,但它不执行,而是返回 ActionResult