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;
    	}
    }
    
  • 相关阅读:
    Shell需注意的语法问题
    iconv编码转换
    使用cocos创建的项目,如何进行源码调试?
    git切换到远程分支
    在 Git 中 Checkout 历史版本
    JAVA keytool 使用详解
    JAVA调用 keytool 生成keystore 和 cer 证书
    写出好的 commit message
    JAVA
    面试中关于Java你所需知道的的一切
  • 原文地址:https://www.cnblogs.com/kellynic/p/6070296.html
Copyright © 2011-2022 走看看