chiname

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

.NET Mvc Razor也可以这样玩!

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

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

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

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<T> : TemplateBase<T>
 {
       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<T>,我看了它的源码不知道为什么一 样要带上一个泛型,想研究的可以自己看看,注册模板后你就可以使用了,
CustomTemplate service = new CustomTemplate();
return service.Parse(Content, null, ViewBag, Guid.NewGuid().ToString());按这种方法就可以解析了,Razor.Parse方法是TemplateService类里面的 一个虚方法,是支持自己重写的,所以在注册的时候你继承了这个TemplateService类,就是可以实现你想要的了!

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

 

 

 

分类: .NET
绿色通道: 好文要顶 关注我 收藏该文与我联系
11
0
(请您对文章做出评价)
« 上一篇:Ztree之初涉——简单Ztree的实现

posted on 2013-08-20 23:21 流年莫逝 阅读(3296) 评论(22) 编辑 收藏

评论

#1楼 2013-08-20 23:46 幻天芒  

 

用这个来做代码生成器还是挺不错的!

  回复引用

#2楼 2013-08-21 08:53 勇攀高峰  

 

不错支持下!

  回复引用

#3楼[楼主] 2013-08-21 09:20 流年莫逝  

 

@幻天芒
是的,很好的一个东西,我做生成静态页面直接用了,很好用!

  回复引用

#4楼[楼主] 2013-08-21 09:20 流年莫逝  

 

@勇攀高峰
谢谢!

  回复引用

#5楼 2013-08-21 10:05 厦门蚊子  

 

一直用它来做邮件模板。。。

  回复引用

#6楼 2013-08-21 10:27 齐永强2012  

 

O(∩_∩)O~ 这个不错~

  回复引用

#7楼 2013-08-21 10:54 Artech  

 

除了T4之外,Code Generation又一个不错的选择!

  回复引用

#8楼[楼主] 2013-08-21 12:20 流年莫逝  

 

@Artech
Code Generation我只用过一次,它也能生成和解析Razor吗?

  回复引用

#9楼 2013-08-21 13:19 ☑傻瓜小Yǚ  

 

~哎呀~学习~

  回复引用

#10楼 2013-08-21 17:21 越笨越爱  

 

好东东……
公司的项目就是RAZOR的,学习下……

  回复引用

#11楼 2013-08-22 10:44 zhp1254  

 

一般都用xls啊,用来做后台很好用的,我现在用的是nvelocity

  回复引用

#12楼 2013-08-22 10:56 划破黑夜  

 

mark mark

  回复引用

#13楼 2013-08-22 11:27 BangQ  

 

nvelocity 可以在2.0下面用 razor不可以

  回复引用

#14楼[楼主] 2013-08-22 11:58 流年莫逝  

 

@BangQ
这个确实是!

  回复引用

#15楼[楼主] 2013-08-22 11:59 流年莫逝  

 

@zhp1254
你这xls啥意思?没明白!

  回复引用

#16楼 2013-08-22 12:27 Ronzy  

 

@流年莫逝
引用@zhp1254
你这xls啥意思?没明白!

xslt吧

  回复引用

#17楼 2013-08-22 13:08 爱爱春春  

 

mark

  回复引用

#18楼 2013-08-22 13:29 吕津  

 

茴香豆的回子字有几种写法?

  回复引用

#19楼 2013-08-22 14:25 Hugh Wang  

 

果断Mark

  回复引用

#20楼 2013-08-22 14:57 zhp1254  

 

@Ronzy
haha

  回复引用

#21楼 2013-08-22 16:04 NewSea  

 

真不错。 有时间测试一下性能。 这是动态执行啊。

  回复引用

#22楼 2013-08-22 16:20 maczhong  

 

他和T4,各有各的特色。。

  回复引用

posted on 2013-08-22 17:14  把我的欢乐带给你  阅读(509)  评论(0)    收藏  举报