.NET Mvc Razor也可以这样玩!
????? 忙碌的工作總是占據(jù)了生活的大部分的時間!所以我的博客到現(xiàn)在還是寥寥的幾篇文章,技術是用來分享和學習的,對技術有不同的見解,大家都可以分享下,如果如下文章有問題之處請各位指出來,在這個閑下來的時間給大家說說mvc Razor除了在視圖上解析外,一樣可以這樣用。
?????在有些項目需求上或許需要根據(jù)模板生產(chǎn)靜態(tài)頁面,那么你一樣可以用Razor語法去直接解析你的頁面從而把解析的頁面生成靜態(tài)頁,首先介紹下RazorEngine,在nuget上可以直接引用到項目上,這個東西通俗的來講就是可以在任何地方解析razor語法,個人覺得要比NVelocity靈活好用很多。在codeplex上有介紹,現(xiàn)在好像搬到Github上了,鏈接http://razorengine.codeplex.com/,最新的版本在Github上,大家可以看看,使用上很方便,如下:
string template = "Hello @Model.Name! Welcome to Razor!";string result = Razor.Parse(template, new { Name = "World" });就這么簡單你就可以不只在視圖頁面上使用Razor了,它完全支持動態(tài)類型,如下:
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后面需要傳遞的參數(shù)類型,只要對號入座就行了,它是支持cache的,當然它的這種cache我個人理解的并不是那種數(shù)據(jù)緩存的cache,如上面dynamic類型的解析Razor.Parse我是演示用的Guid,但是你可以用其他的string字符,如果你下次預編譯模板的時候還是用的這個名字的話就會直接取cache里的模板來做解析,這樣減少了解析時間,這是我的個人理解,目前還沒有深入的去研究。
????? RazorEngine還支持自定義模板,如下代碼:
簡單介紹下啊,上面那個是自定義的模板,里面你可以按你的需求寫相應的方法,這樣在解析的時候你一樣可以使用你的方法,比方我的是返回的字符串,你用@GetStr()一樣可以得到你的返回值,另外你的自定義模板一樣要繼承TemplateBase<T>,我看了它的源碼不知道為什么一樣要帶上一個泛型,想研究的可以自己看看,注冊模板后你就可以使用了,
CustomTemplate service = new CustomTemplate();
return service.Parse(Content, null, ViewBag, Guid.NewGuid().ToString());按這種方法就可以解析了,Razor.Parse方法是TemplateService類里面的一個虛方法,是支持自己重寫的,所以在注冊的時候你繼承了這個TemplateService類,就是可以實現(xiàn)你想要的了!
?????看到官網(wǎng)上有很多提問為什么不能用@Html.Raw()等這些方法,其實你要是仔細看源碼的話是可以支持的,只是換了個寫法你可以直接用@Raw()來進行輸出,就簡單介紹這么多吧,其實RazorEngine還有很多功能的,但是目前以上幾種完全夠解析頁面用了!
?
?
?
轉載于:https://www.cnblogs.com/liunianmoshi/p/3271670.html
總結
以上是生活随笔為你收集整理的.NET Mvc Razor也可以这样玩!的全部內容,希望文章能夠幫你解決所遇到的問題。