zoukankan      html  css  js  c++  java
  • Razor 模板自己渲染出结果 string

    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Mvc.ModelBinding;
    using Microsoft.AspNetCore.Mvc.Razor;
    using Microsoft.AspNetCore.Mvc.Rendering;
    using Microsoft.AspNetCore.Mvc.ViewFeatures;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Threading.Tasks;
    
    namespace XXX
    {
        public class ViewRenderService
        {
            IRazorViewEngine _viewEngine;
            IHttpContextAccessor _httpContextAccessor;
    
            public ViewRenderService(IRazorViewEngine viewEngine, IHttpContextAccessor httpContextAccessor)
            {
                _viewEngine = viewEngine;
                _httpContextAccessor = httpContextAccessor;
            }
    
            public string Render(string viewPath)
            {
                return Render(viewPath, string.Empty);
            }
    
            public string Render<TModel>(string viewPath, TModel model)
            {
                var viewEngineResult = _viewEngine.GetView("~/", viewPath, false);
    
                if (!viewEngineResult.Success)
                {
                    throw new InvalidOperationException($"Couldn't find view {viewPath}");
                }
    
                var view = viewEngineResult.View;
    
                using (var output = new StringWriter())
                {
                    var viewContext = new ViewContext();
                    viewContext.HttpContext = _httpContextAccessor.HttpContext;
                    viewContext.ViewData = new ViewDataDictionary<TModel>(new EmptyModelMetadataProvider(), new ModelStateDictionary()) { Model = model };
                    viewContext.Writer = output;
    
                    view.RenderAsync(viewContext).GetAwaiter().GetResult();
    
                    return output.ToString();
                }
            }
        }
    }
    

    在 Startup.cs 里注册这个 service 类

    services.AddTransient<ViewRenderService>();
    

    在 controller 类中定义使用

    public class FriendlylinksController : BaseController {
    	private readonly ViewRenderService _viewRender;
    	public FriendlylinksController(ViewRenderService viewRender) {
    		_viewRender = viewRender;
    	}
    }
    
  • 相关阅读:
    2016.11.30
    java韩顺平老师视频有需要可以留言
    UESTC 1425 Another LCIS
    hdu 3308 LCIS
    HDU 3308 LCIS 线段树区间更新
    poj crane
    poj1436 Horizontally Visible Segments
    编程习惯记录
    poj 3225 Help with Intervals
    UVA 1513 Movie collection
  • 原文地址:https://www.cnblogs.com/kellynic/p/6070296.html
Copyright © 2011-2022 走看看