Посмотрите на это решение:
Визуализация представления в виде строки
Я использовал его для генерации частичного просмотра, и это сработало. Вам придется переключиться на частичное, но это не должно быть проблемой.
Edit:
Я сделал некоторые исправления, работал с рефлектором и использовал решения из предыдущих вопросов. Этот код выглядит лучше. Механизм рендеринга представлений тесно связан с HttpContext.Current, поэтому нам нужно взломать:
/// <summary>Renders a view to string.</summary>
public static string RenderViewToString(this Controller controller,
string viewName, object viewData)
{
//Getting current response
var response = HttpContext.Current.Response;
//Flushing
response.Flush();
//Finding rendered view
var view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName).View;
//Creating view context
var viewContext = new ViewContext(controller.ControllerContext, view,
controller.ViewData, controller.TempData);
//Since RenderView goes straight to HttpContext.Current, we have to filter and cut out our view
var oldFilter = response.Filter;
Stream filter = new MemoryStream(); ;
try
{
response.Filter = filter;
viewContext.View.Render(viewContext, null);
response.Flush();
filter.Position = 0;
var reader = new StreamReader(filter, response.ContentEncoding);
return reader.ReadToEnd();
}
finally
{
filter.Dispose();
response.Filter = oldFilter;
}
}
Он должен быть легко конвертируемым, чтобы можно было визуализировать View (измените ViewEngines.Engines.FindPartialView на ViewEngines.Engines.FindView). Я не вижу лучшего решения.