Asp.net mvc 3 通过调用操作方法将部分视图呈现为字符串

Asp.net mvc 3 通过调用操作方法将部分视图呈现为字符串,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,我一直在尝试使用以下方法将视图渲染为字符串: 问题是我需要调用我的控制器操作,这在调用View.Render时不会发生 var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); viewResult.View.Render(viewContext, sw); 我的问题是,如何在路由中传递的任意控制器上调用RenderAction?我正在尝试将多个局部视图的结果合成

我一直在尝试使用以下方法将视图渲染为字符串:

问题是我需要调用我的控制器操作,这在调用View.Render时不会发生

var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
viewResult.View.Render(viewContext, sw);
我的问题是,如何在路由中传递的任意控制器上调用RenderAction?我正在尝试将多个局部视图的结果合成为一个结果,该结果将传回浏览器

我的代码到目前为止。除非未调用action方法,否则将正常工作

    public static string RenderPartialViewToString(this Controller controller, string viewName, object model)
    {
        if (string.IsNullOrEmpty(viewName))
            viewName = controller.ControllerContext.RouteData.GetRequiredString("action");

        controller.ViewData.Model = model;

        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
            var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw);
            viewResult.View.Render(viewContext, sw);

            return sw.GetStringBuilder().ToString();
        }
    }



        var route = new RouteData();
        route.Values.Add("controller", "Test1");
        route.Values.Add("action", "Index");

        var controller1 = new Test1Controller();

        var controllerContext = new ControllerContext(new RequestContext(this.ControllerContext.HttpContext, route), controller1);
        controller1.ControllerContext = controllerContext;
        var viewString = controller1.RenderPartialViewToString("~/Views/Test1/Index.cshtml", (object)model);
我的目标是创建一个简单的CMS系统,将多个控制器操作/视图的结果组合在一起,并将它们输出到布局中


我有一个从数据库检索页面描述的主控制器操作。代码在其他控制器的列表上循环,并调用它们的操作,从而生成一个动态对象模型和一个部分html片段列表,并将其传递给自定义WebViewPage。

我有点不确定您要实现什么。但是,除了
RenderPartialViewToString
之外,这是一种扩展方法。要在控制器操作中使用,可以执行以下简单操作:

var result = this.RenderPartialViewToString("Index", model)
其中model是“Index”视图中使用的强类型模型。例如,如果您希望将视图呈现为要在JSON操作中使用的字符串,则可以返回JSONResult,其中包含:

return new JsonResult
           {
               JsonRequestBehavior = JsonRequestBehavior.AllowGet,
               Data = new {html = this.RenderPartialViewToString("Index", model)}
           };

此方法仅适用于当前控制器的上下文。当我创建一个伪上下文并调用代码时,它不会调用控制器的操作。它只呈现视图。@Arman您的问题是关于对使用renderpartialviewtostring的控制器操作进行单元测试吗?