ASP.NET MVC的Razor想必大家都比较熟悉,这里介绍一个独立于ASP.NET的RazorEngine。

RazorEngine是一个开源的项目,它的基础就是ASP.NET MVC的Razor。GitHub项目地址

您可以在Windows Console或者Windows Forms使用它。

下面简单介绍如何使用。

1.创建一个Windows Console

2.通过NuGet安装RazorEngine

3.下面先介绍使用字符串替代cshtml文件模板的代码。

using RazorEngine;
using RazorEngine.Templating;
namespace RazorDemo.ConsoleDemo
{
class Program
{
static void Main(string[] args)
{
var template = "Hello @Model.Name, welcome to use RazorEngine!";
var result = Engine.Razor.RunCompile(template, "templateKey1", null, new { Name = "World" });
Console.WriteLine(result);
Console.Read();
}
}
}

运行程序,查看结果。

4.下面是使用cshtml文件作为模板的代码。

4.1添加一个Model文件夹,然后添加一个类UserInfo作为Model。

namespace RazorDemo.ConsoleDemo.Model
{
public class UserInfo
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
}

  

4.2添加一个文件夹Templates,然后添加一个html文件,将扩展名改为cshtml。这个文件属性改为内容Content,总是拷贝Copy always。

@model RazorDemo.ConsoleDemo.Model.UserInfo
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<title>Welcome</title>
</head>
<body>
<p>Hi @Model.FirstName @Model.LastName,</p>
<p>Welcome to use RazorEngine!</p>
</body>
</html>

4.3最后修改Main方法的代码。

using RazorEngine;
using RazorEngine.Templating;
using RazorDemo.ConsoleDemo.Model;
namespace RazorDemo.ConsoleDemo
{
class Program
{
static void Main(string[] args)
{
var path = AppDomain.CurrentDomain.BaseDirectory + "templates\\hello.cshtml";
var template = File.ReadAllText(path);
var model = new UserInfo { FirstName = "Bill", LastName = "Gates" };
var result = Engine.Razor.RunCompile(template, "templateKey2", null, model);
Console.WriteLine(result);
Console.Read();
}
}
}

运行程序,查看结果。

运行程序的时候Console可能会输出一大串有关临时文件的信息,可以忽略。如果想去掉,请参考这里

其实在后台RazorEngine将模板和模型结合后生成了一个对应的临时类文件,然后调用Execute方法生成最终结果。

namespace CompiledRazorTemplates.Dynamic
{
using System;
using System.Collections.Generic;
using System.Linq;
[RazorEngine.Compilation.HasDynamicModelAttribute()]
public class RazorEngine_77696eebc8a14ee8b43cc5e2d283e65a : RazorEngine.Templating.TemplateBase<RazorDemo.ConsoleDemo.Model.UserInfo>
{
public RazorEngine_77696eebc8a14ee8b43cc5e2d283e65a()
{
}
public override void Execute()
{
WriteLiteral("<!DOCTYPE html>\r\n\r\n<html");
WriteLiteral(" lang=\"en\"");
WriteLiteral(" xmlns=\"http://www.w3.org/1999/xhtml\"");
WriteLiteral(">\r\n<head>\r\n <meta");
WriteLiteral(" charset=\"utf-8\"");
WriteLiteral(" />\r\n <title>Welcome</title>\r\n</head>\r\n<body>\r\n <p>Hi ");
Write(Model.FirstName);
WriteLiteral(" ");
Write(Model.LastName);
WriteLiteral(",</p>\r\n <p>Welcome to use RazorEngine!</p>\r\n</body>\r\n</html>\r\n");
}
}
}

  

RazorEngine的用途很多,只要有模板(cshtml)和模型(Model)就可以使用。比如

1)制作一个代码生成器

2)生成邮件正文

如果不妥之处,请见谅。

模版引擎RazorEngine简介的更多相关文章

  1. Javascript模版引擎简介

    回顾 Micro-Templating 出自John Resig 2008年的一片文章,以及其经典实现: // Simple JavaScript Templating // John Resig - ...

  2. Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs

    目录 前言 Express简介和安装 运行第一个基于express框架的Web 模版引擎 ejs express项目结构 express项目分析 app.set(name,value) app.use ...

  3. Express安装入门与模版引擎ejs

    Express安装入门与模版引擎ejs 目录 前言 Express简介和安装 运行第一个基于express框架的Web 模版引擎 ejs express项目结构 express项目分析 app.set ...

  4. js模版引擎开发实战以及对eval函数的改进

    简介 前段时间,想着自己写一个简单的模版引擎,便于自己平时开发demo时使用,同时也算是之前学习的知识的一种总结吧! 首先我们先了解一下模版引擎的工作原理吧! 1. 模版引擎其实就是将指定标签的内容根 ...

  5. Nodejs学习笔记(五)—Express安装入门与模版引擎ejs

    前言 前面也学习了一些Node.js的基本入门知道,现在开始进入Web开发的部分: Node.js提供了http模块,这个模块中提供了一些底层接口,可以直接使用,但是直接开发网站那还是太累了,所以ht ...

  6. 【11】 Express安装入门与模版引擎ejs

    前言 Express简介和安装 运行第一个基于express框架的Web 模版引擎 ejs express项目结构 express项目分析 app.set(name,value) app.use([p ...

  7. [ASPX] 模版引擎XTemplate与代码生成器XCoder(源码)

    模版引擎XTemplate是一个仿T4设计的引擎,功能上基本与T4一致(模版语法上完全兼容T4,模版头指令部分兼容). 自己设计模版引擎,就是为了代码生成器.网站模版.邮件模版等多种场合,也就是要能拿 ...

  8. 构建自己的PHP框架--构建模版引擎(1)

    前段时间太忙,导致好久都没有更新博客了,今天抽出点时间来写一篇. 其实这个系列的博客很久没有更新了,之前想好好规划一下,再继续写,然后就放下了,今天再捡起来继续更新. 今天我们来说一下,如何构建自己的 ...

  9. Smarty模版引擎的原理

    Smarty是一个使用php写出来的模版引擎,用来将原本与html代码混杂在一起PHP代码逻辑分离,实现前后端分离. Smarty模板优点: 1. 速度:采用Smarty编写的程序可以获得最大速度的提 ...

随机推荐

  1. Mybatis数据连接池的配置---增删改查(以及遇见的问题)

    1.首先创建项目和各个文件,如图所示: 2.配置相关数据库连接 在jdbc.properties中加入 1 db.driver=com.mysql.jdbc.Driver 2 db.url=jdbc: ...

  2. 【源码分析】- 在SpringBoot中你会使用REST风格处理请求吗?

    ​ 目录 前言 1.什么是 REST 风格 1.1  资源(Resources) 1.2  表现层(Representation) 1.3  状态转化(State Transfer) 1.4  综述 ...

  3. CMD批处理(3)——批处理选择语句结构

    if 的用法详解 命令格式1:if [NOT] ERRORLEVEL number command 命令格式2:if [NOT] string1==string2 command 命令格式3:if [ ...

  4. Linux中su和sudo的用法

    su -#su - oldboy //当执行这个命令的时候表示切换到oldboy用户,并且重新读取用户环境相关配置文件,具体的来说就是执行下用户家目录下.bash_profile和.bashrc文件, ...

  5. 4、git和gitlab的配置(2)

    4.10.使用 gitlib 模拟开发流程: 1.项目经理指定开发计划: project01 需求 开发者 完成日期 v1.0 首页 dev01 4.28 支付 dev02 4.30 2.rpm(项目 ...

  6. SpringBoot:Service层使用@Autowired 注解 mapper对象爆红问题

    问题点 这个报错可能导致程序运行大面积爆红 这个报错会逼疯强迫症 解决方法 为避免程序运行报错 ,需要在Application.class添加注解@MapperScan(mapper包位置) @Spr ...

  7. Flyway:Spring Boot中使用Flyway来管理数据库版本

    Flyway简介 Flyway是一个简单开源数据库版本控制器(约定大于配置),主要提供migrate.clean.info.validate.baseline.repair等命令.它支持SQL(PL/ ...

  8. redis-cluster集群安装(windows)

    在此先奉上安装包(链接:https://pan.baidu.com/s/1QHYQPkYPuiRWhdj9APbjnw 提取码:jv8x ) 1. 安装ruby 下载 rubyinstaller-2. ...

  9. 使用命令行操作MySQL 及 语法

    在使用之前先要确保服务中的MySQL 已启动,否则会报错:ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061 ...

  10. 12 shell case in语句

    Shell也支持两种分支结构(选择结构),分别是 if else 语句和 case in 语句.当分支较多,并且判断条件比较简单时,使用 case in 语句就比较方便了. if else 语句与ca ...