読者です 読者をやめる 読者になる 読者になる

ASP.NET MVC 5 でビューから文字列を作成する

.net

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();
            }
        }
    }
}

フレームワーク側で提供して欲しいけど、需要ないんだろうか。ないんだろうな。