最近在看 Oxite 原始碼的時候,發現一段有趣的程式碼,感覺很像 Perl 的陣列,但我從未在 C# 程式中看到有人這麼用,如下範例:
<%= Html.TextBox("username", Request["username"],
new {
id = "login_username",
@class = "text",
tabindex = "1",
title = Localize("Your username...")
}
) %>
我覺得奇怪的地方是在 Html.TextBox 第三個參數的地方用的雖然是一個匿名型別,但有個屬性設定時竟然是 @class 耶,第一眼看到的感覺是「好奇怪」的寫法,難道又是什麼未公開的密技嗎?因為我從未這樣寫過。
這段程式是 ASP.NET MVC 的 View 常用的一個 HTML Helpers 寫法,因為 ASP.NET MVC 的 View 經常需要透過 HTML Helpers 輸出標籤或表單欄位,而在設定時經常需要設定額外的 HTML 屬性(Attributes),所以才需要第三個參數設定,但是若要設定 HTML 中的 class 屬性時,就遇到大災難了!因為 class 是 C# 關鍵字(保留字),照裡說不能出現在屬性、欄位、方法、變數名稱中。
經查證得知,原來在 C# 中還是可以使用保留字當識別名稱,只要前面加上一個小老鼠符號 ( @ ) 即可!
這個技巧對於 ASP.NET MVC 開發人員來說非常的重要,不然每次用 HTML Helper 時都不能設定 class 屬性時,心中的怒火應該會越燒越旺!^_^
相關連結