@functions、@section、@helper method的使用

 

一、@functions的使用

@functions{
    string ConvertUpper(string letter)
    {
        return letter.ToUpper();
    }
}

@ConvertUpper("abc")

利用@functiions關鍵字來宣告一個專給View呼叫的function,

然後將輸出也秀回在View上,如圖

 

二、@section的使用

用法請參考主版頁面與 RenderSection

 

三、@helper method的使用

@helper TestHelper(string input)
{
    <h1>@input</h1>
    <h1>pure word</h1>
}

@TestHelper("test word")

此View利用呼叫@helper method,來秀出帶有樣式的文字,如圖

 

上一個例子只能在原本的view template呼叫@helper method,

那我們希望能在其他view template也可以使用這方便的@helper method要如何做?

承上一個例子,@helper method的內容移置專案根目錄手動新增的App_Code資料夾,

檔案名稱和內容如下圖

此App_Code資料夾就是任何一個view template都可以叫用,

於任一個view template裡呼叫@helper method的方式如下

執行畫面

代表該@helper method已成功移植至App_Code資料夾

 

另外要注意的是,

@helper method裡可以使用ASP.NET MVC Html helper methods,如Html.ActionLink(),

但是該@helper method移到App_Code資料夾之後就無法使用ASP.NET MVC Html helper methods,

這個issue之後會改進嗎?請參考ASP.NET MVC 3 and the @helper syntax within Razor

我個人在想自訂Html helper應該可以解決以上需求,

缺點就是在設計html原始碼時,並不是那麼地直覺。

 

四、差異

經由以上說明比較三者的最大的差異為

由@functions所宣告的內容只能放入C#程式;

由@section所宣告的內容只能RenderSection放入html程式碼;

由@helper所宣告的內容擁有部分@functions與@section的特性,

也就是說@helper可以封裝一段Razor語法,

但請注意@helper特性並不完全等於@functions + @section。

 

參考資料:

自訂 Html Helper - 利用擴充方法去擴充 Html 輔助方法​