• 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;
    	}
    }
    
  • 相关阅读:
    线程 ,进程和协程
    HTML
    自定义进程池的方法
    线程,进程 ,队列 基本用法总结
    socket 和 SocketServer 模块
    json 和 pickel 详解
    面向对象进阶篇
    面向对象基础 反射
    模块
    字符串格式化
  • 原文地址:https://www.cnblogs.com/kellynic/p/6070296.html
Copyright © 2020-2023  润新知