.NET RazorEngine Razor知识集合 Razor也可以这样玩

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: mvc Razor除了在视图上解析外,一样可以这样用。  在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,首先介绍下RazorEngine,在nuget上可以直接引用到项目上,这个东西通俗的来讲就是可以在任何地方解析razor语法,个人觉得要比 NVelocity灵活好用很多。

mvc Razor除了在视图上解析外,一样可以这样用。

  在有些项目需求上或许需要根据模板生产静态页面,那么你一样可以用Razor语法去直接解析你的页面从而把解析的页面生成静态页,首先介绍下RazorEngine,在nuget上可以直接引用到项目上,这个东西通俗的来讲就是可以在任何地方解析razor语法,个人觉得要比 NVelocity灵活好用很多。在codeplex上有介绍,现在好像搬到Github上了,链接http://razorengine.codeplex.com/,最新的版本在Github上,大家可以看看,使用上很方便,如下:

  string template = “Hello @Model.Name! Welcome to Razor!”; string result = Razor.Parse(template, new { Name = “World” });

  就这么简单你就可以不只在视图页面上使用Razor了,它完全支持动态类型,如下:

  dynamic ViewBag = new DynamicViewBag(); ViewBag.list = “流年莫逝”; string template = “Hello Word @ViewBag.list”; string result = Razor.Parse(template,null,ViewBag,Guid.NewGuid().ToString());

  一样可以解析出来,看源码活着是VS的智能提示你可以看到Razor.Parse后面需要传递的参数类型,只要对号入座就行了,它是支持cache的,当然它的这种cache我个人理解的并不是那种数据缓存的cache,如上面dynamic类型的解析Razor.Parse我是演示用的Guid,但是你可以用其他的string字符,如果你下次预编译模板的时候还是用的这个名字的话就会直接取cache里的模板来做解析,这样减少了解析时间,这是我的个人理解,目前还没有深入的去研究。

  RazorEngine还支持自定义模板,如下代码:

  //自定义模板 public class MyTemplateBase : TemplateBase { public string GetStr() { return “流年莫逝”; } } //注册自定义模板 public class CustomTemplate : TemplateService { public CustomTemplate() { var Service = new RazorEngine.Configuration.TemplateServiceConfiguration(); Service.BaseTemplateType = typeof(MyTemplateBase<>); var MyTemplate = new TemplateService(Service); Razor.SetTemplateService(MyTemplate); } }

  简单介绍下啊,上面那个是自定义的模板,里面你可以按你的需求写相应的方法,这样在解析的时候你一样可以使用你的方法,比方我的是返回的字符串,你用@GetStr()一样可以得到你的返回值,另外你的自定义模板一样要继承TemplateBase,我看了它的源码不知道为什么一样要带上一个泛型,想研究的可以自己看看,注册模板后你就可以使用了,

  CustomTemplate service = new CustomTemplate(); return service.Parse(Content, null, ViewBag, Guid.NewGuid().ToString());

  按这种方法就可以解析了,Razor.Parse方法是TemplateService类里面的一个虚方法,是支持自己重写的,所以在注册的时候你继承了这个TemplateService类,就是可以实现你想要的了!

  看到官网上有很多提问为什么不能用@Html.Raw()等这些方法,其实你要是仔细看源码的话是可以支持的,只是换了个写法你可以直接用@Raw()来进行输出,就简单介绍这么多吧,其实RazorEngine还有很多功能的,但是目前以上几种完全够解析页面用了!

原文出自:
http://soft.chinabyte.com/database/365/12771365.shtml
http://www.cxyclub.cn/n/22804/

RazorEngine Razor知识集合:

代码生成就用Razor模板:
http://www.cnblogs.com/hjblog/archive/2012/11/14/2769660.html

Razor - 模板引擎 / 代码生成 - RazorEngine
http://www.atove.com/Article/Details/0C9DDD08B36EA15445653A0879752C69#TMd_AutoId_14

MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
http://www.qingruanit.net/blog/23930/note3712.html?m=true

基于.net搭建热插拔式web框架(RazorEngine实现)
http://www.tuicool.com/articles/AVbQnyI

C#模板引擎 RazorEngine3.7的简单使用
http://blog.csdn.net/somethingwhat/article/details/47189065

目录
相关文章
|
5月前
|
开发框架 安全 .NET
C# .NET面试系列三:集合、异常、泛型、LINQ、委托、EF!
<h2>集合、异常、泛型、LINQ、委托、EF! #### 1. IList 接口与 List 的区别是什么? IList 接口和 List 类是C#中集合的两个相关但不同的概念。下面是它们的主要区别: <b>IList 接口</b> IList 接口是C#中定义的一个泛型接口,位于 System.Collections 命名空间。它派生自 ICollection 接口,定义了一个可以通过索引访问的有序集合。 ```c# IList 接口包含一系列索引化的属性和方法,允许按索引访问、插入、移除元素等。 由于是接口,它只定义了成员的契约,而不提供具体的实现。类似于 IEnumera
324 2
|
XML JSON 缓存
推荐一个.Net常用代码集合,助你高效完成业务
这个代码集合,都是一些常用的功能性代码,每个类都是独立、没有相互依赖,可以单独使用。
174 0
推荐一个.Net常用代码集合,助你高效完成业务
.NET中将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),并使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA
.NET中将集合M内非空参数值的参数按照参数名ASCII码从小到大排序(字典序),并使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串stringA
333 0
tsh
|
JSON 前端开发 JavaScript
.net core 2.0 Razor调用ajax(自学笔记)
刚刚开始使用.net core 2.0 Razor进行web开发,上来就遇到一点小问题,在前端页面如何调用ajax,网上的文章很多,但大多是传统的MVC架构,即通过ajax调用controller,虽可以使用但总不理想。
tsh
2744 0
|
测试技术
.net持续集成测试篇之Nunit文件断言、字符串断言及集合断言
.net持续集成测试篇之Nunit文件断言、字符串断言及集合断言使用前面讲过的方法基本上能够完成工作中的大部分任务了,然而有些功能实现起来还是比较麻烦的,比如说字符串相等性比较不区分大小写,字符串是否匹配某一正则规则,集合中的每一个(某一个)元素是否符合特定规则等,Nunit提供了一些特定的方法用来实现一些用普通断言比较难以实现的扩展类型和方法.
809 0
一起谈.NET技术,.NET 3.x新特性之自动属性及集合初始化
  今天公司弄了个VS2008 beta 2中文版,虽然很大一部分是为了JS的智能提示外,也应该好好的温习一下.NET的一些新特性,由于以前写过一些文章,但是都没有系统的学过,都只是尝一下新鲜感。不知道从那开始,所以今天就来看看自动话属性,以及对象初始化和集合初始化的一些新特性。
660 0
|
XML 数据格式 索引
一起谈.NET技术,话说索引器、foreach和集合初始化器
  索引器   在使用集合类时我们经常用到索引器,例如List集合,我们使用int数字作为索引器参数,而字典集合我们可以使用任何对象作为索引器参数。   在我们自己定义的类中使用索引器的情况也许不多,现在举例详细说明一下。
758 0
|
Web App开发 前端开发 .NET
一起谈.NET技术,ASP.NET MVC 3和Razor中的@helper 语法
  ASP.NET MVC 3支持一项名为“Razor”的新视图引擎选项(除了继续支持/加强现有的.aspx视图引擎外)。当编写一个视图模板时,Razor将所需的字符和击键数减少到最小,并保证一个快速、通畅的编码工作流。
1048 0
|
前端开发 .NET C#
一起谈.NET技术,ASP.NET MVC3 Razor视图引擎-基础语法
  I:ASP.NET MVC3在Visual Studio 2010中的变化   在VS2010中新建一个MVC3项目可以看出与以往的MVC2发生了很明显的变化。   1.ASP.NET MVC3必要的运行环境为.NET 4.0 (想在3.5用MVC3,没门!)。
940 0
|
存储 C# 索引
一起谈.NET技术,在C#中选择正确的集合进行编码
  要选择正确的集合,我们首先要了解一些数据结构的知识。所谓数据结构,就是相互之间存在一种或多种特定关系的数据元素的集合。结合下图,我们看一下对集合的分类。   集合分类   在上图中,可以看到,集合总体上分为线性集合和非线性集合。
1049 0
下一篇
无影云桌面