Я экспериментировал с рендерингом представления в строку, используя методы, описанные здесь:
Визуализация представления в виде строки
Проблема в том, что мне нужновызовите действие моего контроллера, которое не происходит при вызове View.Render.
var viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName);
viewResult.View.Render(viewContext, sw);
Мой вопрос: как я могу вызвать RenderAction на произвольном контроллере, проходящем по маршруту?Я пытаюсь объединить результаты нескольких частичных представлений в один результат, который будет передан обратно в браузер.
Пока мой код.Работает за исключением того, что метод действия не вызывается.
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.