使用Razor模板構建應用注意的細節


Razor在語法上的確不錯,用起來非常方便。除了在asp.net mvc中使用外其實我們可以通過使用這模板來完成其他方面的工作,如我們比較常用的代碼生成輸出。如果想用Razor來進行模板處理和輸出信息等應用心下幾點細節是需要注意的。

1)程序集和名稱引用

2)編譯錯誤提示處理

3)模板編寫智能提示

以上幾點主要是在基於Razor實現自有MVC組件所總結出來的,相信對那些想使用Razor進行應用處理的朋友有所幫助。如果想用Razor的朋友但又不了解的話可以到以下鏈接了解一下:http://www.west-wind.com/weblog/posts/2010/Dec/27/Hosting-the-Razor-Engine-for-Templating-in-NonWeb-Applications

程序集和名稱引用

由於Razor解釋模板后最終是會通過CodeDom來生成對應輸出的靜態對象,那對於引用的程集和模板對應引用的名稱空間是比較重要,如果這兩者處理不好的情況只會導致最終CodeDom編譯錯誤。實際應用編寫模板所涉及的程序是不固定的,所以也不可能預想地把對應的程序加進去;解決方法可以在CodeDom的時候得到當前應用域引用的所有程序集添加進去處理。

foreach (Assembly item in AppDomain.CurrentDomain.GetAssemblies())
            {
                AddAssembly(item.Location);
            }

名稱空間的引用對於編寫模板應用的時候帶來很大的便利性,雖然每個模板可以單獨引用但顯然不夠一個地方引入來的方便。這問題的解決方法可以通過配置文件來配置得到。如果當前項目是web項目就簡單點了,直接讀取web配置的名稱空間即可。

編譯錯誤處理

在asp.net mvc中當編寫Razor語法有錯誤的時候,在解釋頁面時都能明確顯示那些地方編寫錯誤。但自己制訂Razor模板處理的時候可能沒在關注這一點,這樣存存在一個比較嚴重的問題就是當模板編譯錯誤的情況,使用者很難知道具體錯誤的原因和地方。其實Razor已經提供了模板驗證功能通過RazorTemplateEngine.ParseTemplate會對模板進行語法驗證,並返回存在錯誤的信息和對應的錯誤位置。

由於Razor最終需要通過CodeDom來把模板編譯成靜態化,因此在編譯過程也可能存在一些錯誤,而這些錯誤並不是Razor語法所導致的,有可能是方法不存或方法名不匹配引起;因此在靜態編譯層面出現的錯誤也應該能明確提示給使用者看.在代碼中可以通過CompilerResults得到相應的編譯錯誤信息,同樣包括錯誤的信息和具體錯誤所在的行.

模板編寫智能提示

其實VS已經對cshtml提供了智能提示功能,但對於不是MVC項目如傳統的ASP.NET項目,WINFORM項目等.在編寫cshtml名稱空間引入就相對比麻煩,同樣由於VS默認給cshtml提供了基礎類型的指定,如果應用中Razor使用的是其他基類那無法針對相應基礎類提示了.其實解決這個的問題比較簡單只需要在項目中添加web.config文件(不管是asp.net,winform或類庫),添加以下配置節即可.

<configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <system.web.webPages.razor>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
    <pages pageBaseType="Peanut.Razor.TemplateBase,Peanut">
      <namespaces>
        <add namespace="Peanut" />
        <add namespace="Peanut.Razor" />
        <add namespace="Peanut.Html" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

在namespaces中添你需要引入的名稱空間即可,而模板的基礎類通過pageBaseType指定即可.

以上是在使用razor構建自有MVC應用的時候總結出來的一些心得,希望對那此想使用razor做應用的同學有所幫助.不過還有一個比較重要的問題不能解決就是在模板里設置斷點無法實現調試...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM