ASP.NET MVC 5 でビューが描画する HTML を、そのままレスポンスとして返すんじゃなくて、 いったん文字列で変数に格納したかったのでやってみた。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace RenderViewSample.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult String() { var html = RenderViewAsString("Index"); return Content(html, "text/html", System.Text.Encoding.UTF8); } private string RenderViewAsString(string viewName, object model = null, string masterName = "_Layout") { ViewData.Model = model; using (var writer = new System.IO.StringWriter()) { var viewResult = ViewEngineCollection.FindView(ControllerContext, viewName, masterName); var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, writer); viewResult.View.Render(viewContext, writer); viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View); return writer.GetStringBuilder().ToString(); } } } }
フレームワーク側で提供して欲しいけど、需要ないんだろうか。ないんだろうな。