一、.Net Core Mvc下获得
建立一个帮助类,如下:
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Mvc.ViewEngines; using Microsoft.AspNetCore.Mvc.ViewFeatures; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Threading.Tasks; namespace NetCorePortal.Models { public class ViewHtmlHelper { public static string ConvertToString(Controller controller, string viewName, object viewModel, bool isMainPage) { controller.ViewData.Model = viewModel; using (StringWriter sw = new StringWriter()) { IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine; ViewEngineResult viewEngineResult = viewEngine.FindView(controller.ControllerContext, viewName, isMainPage); if (viewEngineResult.Success) { ViewContext viewContext = new ViewContext( controller.ControllerContext, viewEngineResult.View, controller.ViewData, controller.TempData, sw, new HtmlHelperOptions() ); viewEngineResult.View.RenderAsync(viewContext); return sw.GetStringBuilder().ToString(); } else { return $"视图{viewName}不存在"; } } } } }
后台调用方法
public ContentResult ViewToStringDemo() { string strView = ViewHtmlHelper.ConvertToString(this, "Index", "", true); return Content(strView); }
参考自:https://www.cjavapy.com/article/147/
二、.Net Mvc下获得
/// <summary> /// 获得LayTreeGrid视图的HTML内容 /// </summary> /// <returns></returns> public ContentResult ViewText() { string html = string.Empty; IView view = ViewEngines.Engines.FindView(this.ControllerContext, "LayTreegrid", null).View; ViewDataDictionary vdd = new ViewDataDictionary(); TempDataDictionary tdd = new TempDataDictionary(); using (System.IO.StringWriter sw = new System.IO.StringWriter()) { ViewContext viewContext = new ViewContext(this.ControllerContext, view, vdd, tdd, sw); viewContext.View.Render(viewContext, sw); html = sw.ToString(); } return Content(html); }