.NET: Convert or Render an MVC View To a String

1/17/2015 4:30:12 PM

Sometimes when you make an Ajax call, you want to return Html. You also want to use a partial view to design the view. The following code creates a base controller that includes a method to render a view into a string with the resulting Html. You can then return the string to the front end using a Json object.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyWebsite.Web.Controllers
{
    public class BaseController : System.Web.Mvc.Controller
    {                
        protected string RenderPartialViewToString()
        {
            return RenderPartialViewToString(null, null);
        }


        protected string RenderPartialViewToString(string viewName)
        {
            return RenderPartialViewToString(viewName, null);
        }


        protected string RenderPartialViewToString(object model)
        {
            return RenderPartialViewToString(null, model);
        }


        protected string RenderPartialViewToString(string viewName, object model)
        {
            if (string.IsNullOrEmpty(viewName))
            {
                viewName = ControllerContext.RouteData.GetRequiredString("action");
            }

            ViewData.Model = model;

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

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