[ASP.NET MVC]預編譯Razor Helper Method

會用預編譯不只是為了讓第一次網站執行時比較快速外,還有很多的原因,如事先發現View的編譯錯誤、讓客戶拿不到HTML,還有更重要的可以將View一同編譯到底層組件,將View當成組件使用,本篇說明如何將Razor的Helper Method預編譯到dll中,讓其他的專案也可以使用。

會用預編譯不只是為了讓第一次網站執行時比較快速外,還有很多的原因,如事先發現View的編譯錯誤、讓客戶拿不到HTML,還有更重要的可以將View一同編譯到底層組件,將View當成組件使用,本篇說明如何將Razor的Helper Method預編譯到dll中,讓其他的專案也可以使用。

 

對Razor的一些說明可以看小弟的其他文章

[ASP.NET MVC]Razor Views 預編譯(Pre-Compile)[1]-加快第一次執行回應速度

[ASP.NET MVC]Razor Views 預編譯(Pre-Compile)[2]-獨立View並讓新舊View共存

 

什麼是Razor Helper Method?

Razor Helper Method是可以將一些HTML Tag與一些判斷組成一個Method,方便重覆使用與減化操作。

如封裝YouTube需要的Tag

image

在View中可以方便使用

image

Razor Helper Method的詳細使用可以參考ASP.NET MVC 3 and the @helper syntax within Razor

但是因為Razor Helper Method是放在.cshtml或.vbhtml中,預設的情況如果想在其他專案中使用,必需以複製檔案的方式到別的專案中,並不是一個好方式,所以小弟習慣將常用且通用的功能放到底層模組中,搭配NuGet,就可以很方便的在不同的專案中使用。

NuGet的說明可以參考小弟的NuGet系列文章

 

預編譯Razor Helper Method

Razor Helper Method與一般的頁面的預編譯有一些不同,多了幾個步驟,以下是設定方式:

 

1.安裝Visual Studio Razor Generator Extension

 

2.新增共用模組專案

共用模組的專案範本是不是ASP.NET MVC到無所謂,使用類別庫專案範本也可以,但是使用類別庫專案要在專案中放web.confg,讓IDE可以找到Web相關設定

image

web.config的內容也不用多,只要跟下面的一樣就可以了(可以直接複製MVC專案的web.config,刪除不必要的)。

image

 

3.新增空白.cshtml,以Video.cshtml為例。

 

4.在Viedo.cshtml的屬性頁中自訂工具輸入RazorGenerator,自訂工具命名空間輸入System.Web.Mvc,輸入完後會產生Video.generated.cs檔案

image

為什麼自訂工具命名空間要輸入System.Web.Mvc呢?

因為我覺得在使用的時候還要設定namespace很麻煩,因為System.Web.Mvc是預設會載入的namespace,所以設定System.Web.Mvc可以省下設定,如果不喜歡可以自行輸入或者不輸入使用預設值。

載入namespace的方式可以參考 ASP.NET MVC 3 使用 Razor 如何在 Web.config 宣告預設的 Namespaces – demoshop

 

5.Viedo.cshtml中的第一行輸入@* Generator:WebPagesHelper *@,這是告訢RazorGenerator使用那一種模式去產生檔案,WebPagesHelper就是Razor Helper使用的模式。

image

 

6.編譯,沒有錯誤就大功告成啦。

 

使用

使用很簡單,只要將dll加入參考就可以了。

image

在任何的View中就可以使已經寫好且共用的Razor Helper Method。

image