如何在动作中调用并返回另一个控制器动作的输出?

Ext*_*kun 3 c# asp.net asp.net-mvc asp.net-mvc-3

我们正在为我们的项目开发一个"插件"架构,在那里扩展软件的功能,客户端可以编写自己的控制器并将其包含在项目中.(插件将根据客户端将添加到模式中的表生成不同的输出).

通过控制器动作中的动作来访问插件,比如说 /reports/get/?type=spending

因此,在这种情况下,操作必须将控制器放置在"插件"区域内并调用索引操作(例如areas/plugin/spending/index).如何在操作内部调用此操作/reports/get/?type=spending并获取其输出?

arc*_*hil 8

Html.RenderAction方法用于在视图中呈现其他动作的输出.从中获益,在控制器中也是如此

using System.Web.Mvc.Html;
public void Index()
        {
            StringBuilder resultContainer = new StringBuilder();
            StringWriter sw = new StringWriter(resultContainer);

            ViewContext viewContext = new ViewContext(ControllerContext, new WebFormView(ControllerContext, "fakePath"), ViewData, TempData, sw);

            HtmlHelper helper = new HtmlHelper(viewContext, new ViewPage());

            helper.RenderAction("create");

            sw.Flush();
            sw.Close();
            resultContainer.ToString(); //"This is output from Create action"
        }
public ActionResult Create()
        {
            return Content("This is output from Create action");
        }
Run Code Online (Sandbox Code Playgroud)

实际上,RenderAction可以传递您想要的所有路由数据,而不仅仅是动作名称