Razor Templating Engine

简介:

  最近遇到html模板解析,我完全可以用MS的T4模板或者是StringTemplate等其他的模板来做,但是出于尝试和对Razor语发的感兴趣,便翻了翻Razor模板的资料,其CodePlex主页http://razorengine.codeplex.com/

      下面讲的都是一些其主页上面的例子,所以请大家别拍砖。别后面想到有些实际意义的例子在写个具体的运用例子吧。

 
  1. 代码   
  2.  
  3. public static class Razor   
  4. {   
  5.     public static string Parse(string template, string name = null);   
  6.     public static string Parse<T>(string template, T model, string name = null);   
  7.     public static void SetLanguageProvider(ILanguageProvider provider);   
  8.     public static void SetMarkupParser(MarkupParser parser);   
  9.     public static void SetTemplateBaseType(Type type);   
  10. }  

在Razor这个静态类中最重要的方法当然是我们的Parse方法了,其有两个重载,在第二个重载在我们可以传入Template的Model,了解asp.net mvc都会知道这个Model。同时我们可以用SetLanguageProvider方法传入LanguageProvider(C#、VB)等,SetTemplateBaseType传入模板BaseType(可能是我们的自定义类型)。

1:先来个简单的Template:

 
  1. 代码   
  2.  
  3. static void Main(string[] args)   
  4.        {   
  5.            string template = "Hello @Model.Name! Welcome to Razor!";   
  6.            string result = Razor.Parse(template, new { Name = "World" });           
  7.            Console.WriteLine(result);   
  8.            Console.Read();   
  9.        }   

输出结果:

Hello World! Welcome to Razor!

在这里我们传入的是new { Name = "World" }的匿名对象的Model。

2:内部嵌套方法:

 
  1. string template = @"@helper MyMethod(string name) {  
  2.  
  3. Hello @name 
  4.  
  5. }  
  6.  
  7. @MyMethod(Model.Name)! Welcome to Razor!";   
  8.  
  9. string result = Razor.Parse(template, new { Name = "World" });   
  10.  

输出同样是上边的结果,但是注意这里的与上面不同的是在{}中间的空格等是不会忽略的。我的理解是同样是一个模板的形式吧。

3:传递模板参数:

在传递参数的情况下我们可以采用自定义类,继承至TemplateBase 或者TemplateBase<T>,后者是带Model的情形。

还是官方的例子来看看,

 
  1. 代码   
  2.  
  3. static void Main(string[] args)   
  4.     {   
  5.         Razor.SetTemplateBaseType(typeof(MyCustomTemplateBase<>));  
  6.  
  7.         string template = "My name in UPPER CASE is: @ToUpperCase(Model.Name)";   
  8.         string result = Razor.Parse(template, new { Name = "Matt" });  
  9.  
  10.         Console.WriteLine(result);   
  11.         Console.Read();   
  12.     }   
  13. }   
  14. public abstract class MyCustomTemplateBase<T> : TemplateBase<T>   
  15. {   
  16.     public string ToUpperCase(string name)   
  17.     {   
  18.         return name.ToUpper();   
  19.     }   
  20. }   
  21.  
  22.  

输出结果为:My name in UPPER CASE is: MATT。

在我们的MyCustomTemplateBase<T>抽象类中我们可以像MVC一样定义一些辅助属性和方法,像html、Request、Response等辅助类等

有事我们需要自定义一些非modle的非static property给Template,我的考虑是在TemplateService 中的重写Parse方法中初始化Action:

public string Parse<T>(string template, T model, string name = null,Action<ITemplate<dynamic>> initAction);





 本文转自 破狼 51CTO博客,原文链接:http://blog.51cto.com/whitewolfblog/835080,如需转载请自行联系原作者


相关文章
|
26天前
|
前端开发 JavaScript Java
模板引擎(Template Engine)是什么?
模板引擎(Template Engine)是一种用于生成文本输出的工具,尤其在Web开发中应用广泛。它的主要目的是将用户界面(通常是HTML等模板文件)与业务数据(内容)分离,从而提供一种高效、灵活的方式来生成动态内容。
25 1
|
3月前
|
安全 网络架构 Python
blog-engine-06-pelican 静态网站生成 支持 markdown 和 reST 语法
这篇内容介绍了多个静态博客引擎的对比及详细教程,包括 Jekyll、Hugo、Hexo、Pelican、Gatsby、VuePress、Nuxt.js 和 Middleman。重点讲述了 Pelican,一个Python编写的静态博客生成器,其特点是静态生成、Markdown写作、丰富的主题和插件系统,以及简单的部署。安装Pelican需要先安装Python,然后通过pip安装Pelican并使用pelican-quickstart初始化博客。文章还提到了Pelican的优点,如速度快、写作体验好、社区支持和高度可定制,但也指出其静态性质和学习曲线较陡峭的不足之处。
|
开发框架 前端开发 搜索推荐
Razor视图引擎
目前我们使用asp.net开发的过程中,接触了三种开发模式:一般处理程序(ashx),webform(aspx),mvc。具体关于asp.net的介绍,请看博客:[总览]Asp.net。 在学习mvc时,我对这两种搜索引擎机制:razor和winform有了新的理解。在mvc中添加视图时,不知道大家有没有注意到这两种视图的区别:
128 0
|
缓存
Express engine 学习笔记 - app.engine 的使用方法
Express engine 学习笔记 - app.engine 的使用方法
207 0
Express engine 学习笔记 - app.engine 的使用方法
|
C++ 容器
Qt+ArcGIS Engine 10.1 开发(二)
ArcGIS Engine+Qt(GUI开发,使用Qt提供的方法) 上面的这种方法,因为不能调试,所以我相信你不会喜欢,其实我也不喜欢,那我们就用这种方式吧,这种方式不需要上面提到的dll,因此也不需要额外的配置。
945 0