MVC @helper

ASP.NET MVC 3支持一項名爲“Razor”的新視圖引擎選項(除了繼續支持/加強現有的.aspx視圖引擎外)。
當編寫一個視圖模板時,Razor將所需的字符和擊鍵數減少到最小,並保證一個快速、通暢的編碼工作流。

  與大部分模板的語法不同,在Razor的幫助下,您不需要中斷代碼編寫,僅僅爲了在HTML中標註

服務器端代碼塊的開始和結束。代碼分析器足夠聰明,它能夠從你的代碼裏推斷出是否爲服務器端代碼。

這種更加簡潔、富有表現力的語法更加乾淨,輸入也更快速,有趣。

  今天的博文涵蓋了Razor的一項很多人都不知道的功能——利用@helper語法定義可重用的幫助器方法。

  簡單的 @helper 方法應用場景

  Razor中的@helper語法讓您能夠輕鬆創建可重用的幫助器方法,此方法可以在您的視圖模板中

封裝輸出功能。他們使代碼能更好地重用,也使代碼更具有可讀性。讓我們看一個超級簡單的應用場景,

它展示了@helper語法是怎樣被使用的。

  在我們定義@helper方法之前的代碼

  讓我們看一個簡單的產品列表應用場景。在此場景中,我們列出產品明細並輸出產品的價格

或是單詞“免費!”——如果這個產品不花費任何成本的話:

  以上代碼非常直截了當,而且Razor的語法使得在HTML裏能簡單地集成服務器端C#代碼。

  然而,一個有點混亂的地方是價格的if/else邏輯。我們可能在站點的其他位置輸出價格

(或者在同一頁面上),而複製以上邏輯很容易出錯且難以維護。類似的應用場景是使用

@helper語法提取和重構成爲幫助器方法的首選考慮。

  使用@helper語法重構以上樣例

  讓我們提取價格輸出邏輯,並將其封裝在一個我們將命名爲“DisplayPrice”的幫助器方法內。

我們可以通過重寫以下代碼樣例來實現此操作:

  我們已經使用上述@helper語法來定義名爲“DisplayPrice”的可重用幫助器方法。

就像標準C#/VB方法一樣,它可以包含任意 數量的參數(您也可以定義參數爲空或可選參數)。

不過,與標準C#/VB方法不同的是,@helper方法可以同時包含內容和代碼並支持其中的完整

Razor語法——這使得定義和封裝呈現/格式化幫助器方法變得非常簡單。

  您可以像調用一個標準的C#或VB方法一樣,調用@helper方法:

  當調用該方法時,Visual Studio會提供智能感知代碼:

  在多視圖模式中重用@helper

  在上面的實例中,我們在相同的視圖模板中將@helper方法定義爲調用它的代碼。或者,

我們可以將@helper方法定義在視圖模板外,並保證其在項目的所有視圖模板中可重複使用。

  您可以在.cshtml/.vbhtml保存我們的@helper方法,並把這個文件放在項目根目錄下

創建的\App_Code目錄下例如,我 在\App_Code文件夾中創建了一個“ScottGu.cshtml”文件,

並且在文件中定義了2個單獨的幫助器方法(在每個文件中您可以有任意數量 的幫助器方法):

  一旦我們的幫助器定義在應用程序級別,我們就可以在應用程序的任何視圖模板中使用它們。

  在上面的\App_Code文件夾中的ScottGu.cshtml會邏輯編譯爲一個稱爲“ScottGu”的類。

這個類中包含了“DisplayPrice” 和 “AnotherHelper”的靜態成員。我們可以使用以下代碼

重寫前面的示例來調用它:

  當像如下方法調用應用程序級別幫助器時,Visual Studio將會提供智能感知代碼:

  5月15日更新:有一些人指出的一個問題是,當一個@helper保存在\app_code目錄中時,

默認情況下您不能訪問其中的 ASP.NET MVC Html幫助器方法。(例如Html.ActionLink(), 

Html.TextBox()等等)。而當它們定義在與視圖相同的文件夾中,您是可以訪問內置HTML幫助器方法的

。當幫助器位於\app_code目錄 下時,確實當下是不支持內置HTML幫助器方法的訪問的——

我們將在下次發佈中添加此功能。Paul Stovall有一個很好的幫助器類,您可以同時訪問和使用

它和您在\app_code目錄下定義的@helper方法中的內置Html方法。請從這裏瞭解更多關於如何使用的信息。

  總結

  Razor的@helper語法提供了一種簡便的方法來將呈現功能封裝到幫助方法中去。

        您可以在單個視圖模板或整個項目的所有視圖模板中重用它。

  您可以使用此功能來編寫更加乾淨、更易維護的代碼。

發佈了38 篇原創文章 · 獲贊 10 · 訪問量 36萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章