This is not easy, because the result of the partial view is sent directly to httpcontext.current.response.output, it does not return a string. You can use this extension method to catch it as a string by filtering the output of httpcontext:
public static string RenderViewToString(this Controller controller,
string viewName, object viewData)
{
var response = HttpContext.Current.Response;
response.Flush();
var view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName).View;
var viewContext = new ViewContext(controller.ControllerContext, view,
controller.ViewData, controller.TempData);
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;
}
}
and use it during debugging:
public PartialViewResult Reload()
{
var result = RenderViewToString("Index",ViewData);
return PartialView("Index");
}
Extension Method for Spark :
public static string RenderSparkToString(this Controller controller,
string viewName, object viewData)
{
var view = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName).View;
var viewContext = new ViewContext(controller.ControllerContext, view,
controller.ViewData, controller.TempData);
var sb = new StringBuilder();
var writer = new StringWriter(sb);
viewContext.View.Render(viewContext, writer);
writer.Flush();
return sb.ToString();
}
source
share