天天看點

.NET Mvc Razor也可以這樣玩!

      忙碌的工作總是占據了生活的大部分的時間!是以我的部落格到現在還是寥寥的幾篇文章,技術是用來分享和學習的,對技術有不同的見解,大家都可以分享下,如果如下文章有問題之處請各位指出來,在這個閑下來的時間給大家說說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<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還有很多功能的,但是目前以上幾種完全夠解析頁面用了!

作者:流年莫逝

出處:

http://www.cnblogs.com/liunianmoshi/

版權聲明:本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。

聲援部落客:如果您覺得文章對您有幫助,可以點選文章右下角【推薦】一下。您的鼓勵是作者堅持原創和持續寫作的最大動力!

繼續閱讀