.NET MVC Razor也可以这样玩!

开发 后端
忙碌的工作总是占据了生活的大部分的时间!所以我的博客到现在还是寥寥的几篇文章,技术是用来分享和学习的,对技术有不同的见解,大家都可以分享下,如果如下文章有问题之处请各位指出来,在这个闲下来的时间给大家说说mvc Razor除了在视图上解析外,一样可以这样用。

忙碌的工作总是占据了生活的大部分的时间!所以我的博客到现在还是寥寥的几篇文章,技术是用来分享和学习的,对技术有不同的见解,大家都可以分享下,如果如下文章有问题之处请各位指出来,在这个闲下来的时间给大家说说mvc Razor除了在视图上解析外,一样可以这样用。

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

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

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

  1. dynamic ViewBag = new DynamicViewBag();  
  2.  ViewBag.list = "流年莫逝";  
  3. string template = "Hello Word @ViewBag.list";  
  4. string result = Razor.Parse(template,null,ViewBag,Guid.NewGuid().ToString()); 

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

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

  1. //自定义模板  
  2.  public class MyTemplateBase<T> : TemplateBase<T>  
  3.  {  
  4.        public string GetStr()  
  5.         {  
  6.                return "流年莫逝";  
  7.         }  
  8. }  
  9.  
  10. //注册自定义模板  
  11.  public class CustomTemplate : TemplateService  
  12.   {  
  13.         public CustomTemplate()  
  14.         {  
  15.             var Service = new RazorEngine.Configuration.TemplateServiceConfiguration();  
  16.             Service.BaseTemplateType = typeof(MyTemplateBase<>);  
  17.             var MyTemplate = new TemplateService(Service);  
  18.             Razor.SetTemplateService(MyTemplate);  
  19.         }  

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

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

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

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

原文链接:http://www.cnblogs.com/liunianmoshi/p/3271670.html

责任编辑:林师授 来源: 博客园
相关推荐

2013-03-29 10:21:23

ASP.NETAjax

2010-12-07 09:38:15

ASP.NET MVC

2012-06-26 10:24:51

Asp.Net框架Razor

2011-01-19 11:17:36

2021-06-22 16:59:56

微软.NETC# 软件开发

2019-01-29 10:00:59

GitHub开源搜索

2024-06-13 08:19:08

Controller接口参数

2012-05-17 16:16:01

Linux系统游戏

2020-09-08 14:13:41

AI亚马逊云科技DeepRacer

2022-05-25 08:42:32

sentinel流控规则

2024-05-17 09:37:26

format属性Spring

2020-11-16 13:38:31

PostMessage

2021-07-28 06:10:47

拖拽设计器 transmat

2021-09-05 07:55:37

前端Emoji 表情

2013-12-16 11:40:15

Win9Windows 9概念图

2022-08-21 14:00:11

消息中间件MQ

2024-08-06 09:51:21

SpringHTTPJSON

2021-10-17 23:46:06

Go项目版本号

2024-08-02 08:38:20

Controller接口地址

2016-09-29 17:48:32

腾讯云语音质检珍爱网
点赞
收藏

51CTO技术栈公众号