MVC3 @helper的使用

1、前言

最近翻到一篇Scott的舊文,覺得挺不錯的,就試着翻譯了一下,文章主要是說如何在Razor中使用@helper語法定義可複用的視圖模板方法。如有疏漏,還請請各位看官指點一二~

原文地址:http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx

2、正文

Asp.net MVC 3提供了一個全新的視圖引擎(View-engine)叫做Razor(同時也繼續提供並增強了對現有的.aspx視圖引擎的支持)。Razor最大程度的減少了編寫視圖模板(譯者注:前端頁面)時需要輸入的字符數和鍵盤敲擊次數,提供了一個快速和流暢的編碼體驗。

與大多數模板語言不同,使用Razor你不在需要使用一些開始和關閉標記來打斷你的編碼(譯者注:像aspx的<% %>),Razor的語法分析器能夠智能的識別代碼。這樣的語法緊湊而簡潔,輸入起來輕鬆愉快。

你可以從我這9個月以來發表的一些文章來了解關於Razor的更多信息:

今天的文章主要是討論一個不甚爲人所知的特性:使用@helper語法定義可重用的helper方法

@helper語法讓你可以輕鬆在視圖模板中創建可重用的幫助方法,以此來封裝一些負責向頁面進行輸出的功能。使用這項技術你將可以寫出可讀性更好的代碼,並抽象出可重用的幫助方法。讓我們來看一個最簡單的例子:

首先看一個展示產品列表的簡單場景:顯示產品的名稱和價格——如果產品沒有價格,則顯示“FREE”

clip_image001

可以看到上面的代碼非常直白,並且Razor的語法使得HTML與服務端C#代碼結合的更加自然和易懂。

只有一個地方看起來有些彆扭,就是針對價格的"If else"邏輯。如果我們需要在另外一個頁面顯示產品的價格,就不得不再寫一遍上面的判斷邏輯,每一個地方都可能出現錯誤,導致代碼難以維護且臃腫。

這種情況就需要把判斷價格的邏輯抽出來形成helper方法。

讓我們把價格判斷邏輯封裝起來,使用一個"DisplayPrice"helper方法來表示它:

clip_image001[10]

我們已經使用@helper語法定義了一個可重用的DisplayPrice方法,就好像標準C#/VB代碼一樣,它可以包含任意數量的參數(你也可以定義可空類型參數)。與標準C#/VB代碼不同的是,你除了可以寫服務端代碼以外,還可以寫入HTML,以及其他Razor支持的語法。

clip_image002

你可以像調用標準C#或VB代碼一樣調用它們

clip_image003

VS也同樣會爲它生成智能提示信息:

clip_image004

下面來討論在多個視圖頁面共享helper方法:

在上面的例子中,我們定義了自己的helper方法,該方法與調用代碼在同一個視圖模板中。我們其實可以將方法定義在視圖模板外部,並且讓它可以被所有的視圖模板所公用。

要實現這個功能,我們需要把定義helper方法的文件放在App_Code目錄下。這個目錄通常應該在項目根目錄下。

比如我創建了一個叫做“ScottGu.cshtml”的文件,並且定義了2個方法在裏面(你可以在一個文件中定義任意多個helper方法):

clip_image005

一旦我們在App層面定義了這些方法,我們就可以在應用程序的任何視圖模板中使用它們。

ScottGu.cshtml模板文件將會自動編譯爲一個叫做ScottGu的類,並且包含2個靜態方法: “DisplayPrice” 和“AnotherHelper” 。

我們可以像下面這樣調用它們:

clip_image006

Visual Studio會爲我們提供智能感知提示:

clip_image007

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章