模板引擎Razor Engine用法示例

栏目: ASP.NET · 发布时间: 7年前

内容简介:好久没写博客了,回宁波后最近几个月一直忙些线下的事情。敲代码方面脱产有阵子了,生疏了,回头一看,这行业果然更新飞快。最近线下的事情基本忙完,准备开始干回老本行,最重要的一件事就是升级abplus库,以符合dotnet standard标准。

好久没写博客了,回宁波后最近几个月一直忙些线下的事情。

敲代码方面脱产有阵子了,生疏了,回头一看,这行业果然更新飞快。

最近线下的事情基本忙完,准备开始干回老本行,最重要的一件事就是升级abplus库,以符合dotnet standard标准。

本篇就是看到abplus里的T4工具,想着换个模板引擎,据说Razor Engine不错,所以玩了下看看。

Razor Engine

介绍RazorEngine的资料很多,这里就简单提提:

  1. RazorEngine最早出自微软AspNet Mvc框架,经历过那个时期的老人基本有印象,Web开发的网页文件,从 .aspx 文件变为了 .cshtml
  2. Razor语法非常干净利落,用起来比 .aspx 的视图语法(各种 <% %> 配对,心累)舒服多了,也正因为此,很多人希望用它替代T4模板(T4模板语法较旧,没有专门编辑器的话,就没有高亮和智能提示)
  3. Razor模板有强类型概念,对于循环生成多个结果比T4方便
  4. Razor使用场景非常灵活,以nuget包形式安装,只要把模板(字符串)和替换数据给它,就能给出替换结果,可以处理运行时动态模板。

但是实际用过后发现,目前RazorEngine在某些地方是不如T4方便的:

.cs

综上,利大于弊,还是值得使用的,不过目前dotnet core版的RazorEngine还不太稳定,这次没跑成功,略遗憾。

下面给的是framework 4.6下的示例代码。

示例代码

首先,安装包

Install-Package RazorEngine

示例代码

static void Main(string[] args)
{
    //读取模板,按照嵌入式资源文件方式管理
    var assembly = Assembly.GetExecutingAssembly();
    //默认命名空间,这里和程序集名称一致
    var defaultNameSpace = assembly.GetName().Name;
    //模板文件名,如果有文件夹,则要加上文件夹名
    var templateFileName = "template1.cshtml";

    var templateContent = string.Empty;
    using (var reader = new StreamReader(
        assembly.GetManifestResourceStream(
            $"{defaultNameSpace}.{templateFileName}")))
    {
        templateContent = reader.ReadToEnd();
    }

    //编译模板
    Engine.Razor.Compile(templateContent, "templateKey", null);

    //使用模板,这里的model信息通过其他途径获取,就能实现很多工具
    //1.连DB,根据表生成类
    //2.读dll,根据程序集内定义的实体信息反射得到类名数据等,
    //  生成辅助代码,如简单CRUD的DTO
    //3.读dll,根据程序集里DTO的定义、AppService接口定义,
    //  或WebApi的定义生成js或者ts调用代理和前端的模型定义
    var output = Engine.Razor.Run("templateKey", null, 
                new { Name = "MyRazorEngineTestClass" });
    
    //输出到文件
    Console.WriteLine(assembly.Location);
    var folderName = "RazorOutput";
    var fileName = "tempClass.cs";
    var targetFolder = $"{
        assembly.Location.Substring(0, 
        assembly.Location.LastIndexOf('\\'))}\\..\\..\\{folderName}";
    
    if (!Directory.Exists(targetFolder))
    {
        Directory.CreateDirectory(targetFolder);
    }
    var targetPath = $"{targetFolder}\\{fileName}";
    File.WriteAllText(targetPath, output);

    Console.Write(output);
    
    Console.ReadLine();
}

demo项目解决方案如图

模板引擎Razor Engine用法示例

可以看到代码中有一个模板编译的步骤,可以了解下 RazorEngine运行的原理

完。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数学建模(原书第5版)

数学建模(原书第5版)

[美] Frank R. Giordano、[美] William P.Fox、[美] Steven B.Horton / 叶其孝、姜启源 / 机械工业出版社 / 2014-10-1 / 99.00元

《华章数学译丛:数学建模(原书第5版)》旨在指导学生初步掌握数学建模的思想和方法,共分两大部分:离散建模和连续建模,通过本书的学习,学生将有机会在创造性模型和经验模型的构建、模型分析以及模型研究方面进行实践,增强解决问题的能力。 《华章数学译丛:数学建模(原书第5版)》对于用到的数学知识力求深入浅出,涉及的应用领域相当广泛,适合作为高等院校相关专业的数学建模教材和参考书,也可作为参加国内外数......一起来看看 《数学建模(原书第5版)》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

MD5 加密
MD5 加密

MD5 加密工具

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器