.NET Mvc Razor也能够这样玩!

      忙碌的工做老是占据了生活的大部分的时间!因此个人博客到如今仍是寥寥的几篇文章,技术是用来分享和学习的,对技术有不一样的看法,你们均可以分享下,若是以下文章有问题之处请各位指出来,在这个闲下来的时间给你们说说mvc Razor除了在视图上解析外,同样能够这样用。缓存

     在有些项目需求上或许须要根据模板生产静态页面,那么你同样能够用Razor语法去直接解析你的页面从而把解析的页面生成静态页,首先介绍下RazorEngine,在nuget上能够直接引用到项目上,这个东西通俗的来说就是能够在任何地方解析razor语法,我的以为要比NVelocity灵活好用不少。在codeplex上有介绍,如今好像搬到Github上了,连接http://razorengine.codeplex.com/,最新的版本在Github上,你们能够看看,使用上很方便,以下:mvc

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还支持自定义模板,以下代码:ui

//自定义模板
 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类,就是能够实现你想要的了!spa

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