Razor視圖引擎淺析之二
原文: http://www.skight.com/技術博客/視圖引擎淺析之二
模板是其最主要的功能,但是另一個次功能也不可忽視,內嵌幫助方法及其智能代碼完成功能。這個附助功能,大大提高效能。
現在,我們面臨的問題是,當脫離ASP。Net MVC的框架以后,如何保持這個特性。幸運的是,微軟提供了擴展的接口或者說方法。
在闡述解決方案之前,還是再回顧一下視圖引擎的原理。
從Web Form到Razor,即有繼承也有揚棄。模板文件(cshtml vbhtml),仍然是當作一個類來處理,這與原來的機制是一致,不同的是不再是靜態類,以前文件名就是頁面類名,并且還可以有一個真正的類文件直接使用(code behind, partial class)。而Razor是完全的運行時編譯生成的類,甚至類名都是臨時生成Guid。
所有這些改變,使得對View的控制如同要抓住隨風漂動的樹葉,幾乎不可能,幸運的是,漂動葉子有著不動的根,這個根就是所有View的基類,WebViewPage。注意到這個類是個抽象類,原因顯而易見。
抓到這個根本之后,MVC的很多特性和功能就立馬找到了出處。
比如,HtmIHelper(Razor 使用@Html), Model (Razor 使用@Model)等,其實都是這個基類的一個屬性。
以上就是Razor視圖的主要的機制,如果開發人員只使用ASPNet MVC本身的功能,而不去擴展,或者像我們一樣完全創建一套自己全新的框架,那么這些背后的故事,知道也可,不了解也無所謂。
而對我們的框架開發來說,還有一個重要問題,擴展接口在哪里?答案卻是極其簡單,在Web,Config文件有一塊<pages>的配置區或,其中有一項ParseBaseType改成你自己View的基類即可。甚至,代碼智能提示(IntelliSense)功能就馬上起作用(也許要重起Visual Studio)。這個自定義類可以繼承自WebViewPage,但非必須。
好了,萬事俱備,可以開始展開你想象翅膀,做你想作的事了。
皓月碧空,漫野如洗,行往卓越的路上

浙公網安備 33010602011771號