自从 ASP.NET MVC 3 推出来之后,其中最大的亮点当数 MVC 3 里的 Razor 页面引擎。用 @{ } 取代了以前的 <%= %>,简洁的语法让开发者赞不绝口。
和 MVC 开源一样,Codeplex 上也开源了这个引擎:RazorEngine, 熟悉MVC开发的童鞋都知道这其中的奥秘,主要是使用了.NET 4.0 dynamic 动态对象。
然后 RazorEngine 会将 template 生成一个临时的 .cs 文件,然后编译并调用。说到代码生成,大家可能都会想到 T4,可惜的是 T4 需要预编译。
那么就先来看看 t4 如何运行时获得结果的代码:
首先添加一个 HelloWorld.tt 内容如下:
修改 tt 的 Customer Tool 属性:TextTemplatingFileGenerator 改为TextTemplatingFilePreprocessor 保存之后,会自动生成一个 HelloWorld.cs 文件。
然后就可以在代码中动态获得结果了:
不难看出,T4 的模板需要预编译,生成模板的静态类型再动态传入值生成结果。所以难以达到动态添加,修改模板的要求。
(msdn:
使用预处理 T4 文本模板生成运行时文本)
再来看看 RazorEngine :没有预编译,只需要动态的传值,字符串即模板。这就给模板的变化带来极大的想象空间,比如:在线的模板修改保存,提供数据并生成结果。
接下来看看如何利用 Razor 打造一个泛用的代码生成器:定义两个输入区域,一个是“全局数据”,一个是“列表数据”。全局数据输入单值即不循环的,列表数据是多行的用于循环输出。
模板页可以随时修改,保存。模板里的变量当然是根据前面的输入来定义的,总是要有规律的嘛。输出的效果
这样任何项目,只要随时定义模板就可即时获得结果,也不要编译。
其实实现也很简单:输入的全局数据和多行数据(第一行数据作为 dynamic 对象的属性)解析后填充到 ExpandoObject 里交给 Razor 就可以了~
其实对于javascript, ruby, python 这样的动态语言,实现上面的功能也不是什么难事。但 Razor 不仅仅提供了动态的编译,还有一个强大的模板解析的功能。
利用 @help 还可以在模板里提供一些辅助方法。这样看来 Razor 也算是 C# DSL 的一种实现了。
分享到:
相关推荐
找了好久才找到的,VS2015-2017可用,大家共享了. 利用RazorEngine 打造简单的泛用代码生成器 自从 ASP.NET MVC 推出来乊后,其中最大的亮点当数MVC Razor页面引擎.用 MVC开源一样
开源C#代码生成器基于winform+DevExpress+RazorEngine.NET 支持SQLSERVER,ORACLE,MYSQL,自定义模板
ASP.NET MVC的Razor想必大家都比较熟悉,这里介绍一个独立于ASP.NET的RazorEngine。 RazorEngine是一个开源的项目,它的基础就是ASP.NET MVC的Razor
RazorEngine3.6.1已经很完善,性能突破,动态编译1秒钟,之后缓存内存,直接调用,第二次耗时小于1毫秒。 string template = "Hello @Model.Name, welcome to RazorEngine!"; var result =Engine.Razor.RunCompile...
用Razor語法寫範本-RazorEngine組件介紹
2020年 RazorEngine 3.7 最新版本,比老版本更快,更安全,不用真的可惜了。性能比以前更快,缓存更加合理,功能更加强大。
用Razor語法寫範本-RazorEngine組件介紹
RazorEngine3.0+Framework4.0
使用Razor模板动态生成代码
主要介绍了ASP.NET MVC使用RazorEngine解析模板生成静态页的相关资料,需要的朋友可以参考下
Razor 開發手冊,詳細說明razor 應用開發.
没有旧版代码。 .NET 5.0 .NET标准2.0 .NET Framework 4.7.2 Windows / Linux 支持发布为单个文件 每一颗星星都使维护者感到高兴! :star:NuGet Install-Package RazorEngineCore文章维基 扩展名wdcossey / ...
借助于开源的RazorEngine,我们可以在非asp.net mvc项目中使用Razor引擎,甚至在控制台、WinForm项目中都可以使用Razor(自己开发代码生成器) 如何使用Razor 环境搭建: ① 添加引用RazorEngine.dll ② 创建cshtml ...
我们在很多项目开发中会常常用到页面静态化,本篇文章主要介绍了详解ASP.NET MVC 解析模板生成静态页(RazorEngine) ,具有一定的参考价值,有兴趣的可以了解一下。
RazorMailer是基于RazorEngine的轻量级框架,它使使用Razor模板发送电子邮件变得非常容易。 其存在的原因以及有关其构建方式的信息可以在此找到。 它的设计使其不依赖任何框架,从而使您可以从首选主机发送电子...
2.1、Asp.net管线事件简易说明 ........................................................................................................................ 6 2.2、Asp.net中常见的HttpHandler类型 ...............
RazorViewEngine 样板 ... 什么是 RazorViewEngine?... 使用 ASP.NET 开发的应用程序可以使用名为 RazorEngine 的外部库,该库利用 MVC 框架的 Razor 引擎功能。 尽管 RazorEngine 插件不直接支持 A
如果在使用VS2015等更高版本的时候出现“File not Found Exception Cannot Load System.Web.Razor.dll Version=2.0.0”这样的错误,请换用下面附件中的程序集把旧的RazorEginee.dll删掉,然后把 RazorEngine.NET4.0....