.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

相關文章
相關標籤/搜索