2

问题:

我需要的是类似于 @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

4

1 回答 1

1

不知道为什么ActionResult要从 another中返回 a controller。可能您可以提供更多详细信息来了解我们的问题域。

我认为您可以考虑使用BaseController并声明GetErrorDone带有返回结果的静态方法。

可以从 All 调用此方法Child Controllers


或第二个答案

考虑使用Controller.RedirectToAction将其重定向到所需的操作

e.g. RedirectToAction("action name" "controller Name")
于 2012-05-30T13:30:31.380 回答