[VS2010] ASP.NET 4.0 新功能:ASP.NET MVC 2.0 Strong-typed HTML Helpers

[VS2010] ASP.NET 4.0 新功能:ASP.NET MVC 2.0 Strong-typed HTML Helpers

ASP.NET MVC 在 2009 年推出以後,受到許多的 Web Developers 的歡迎,尤其是寫慣了 PHP/ASP/JSP 等 script-based Web Application 的 developers,因為 ASP.NET MVC 更貼近了他們的開發環境,而且它也是完全以 MVC (Model-View-Controller) 架構所發展出來的 Framework,所以有愈來愈多的 MVC-based application 出現,雖然它不會直接和 Web Forms Framework 競爭,但它可是相當有潛力的新興 Framework。

 

其中最令人激賞,也最容易讓 ASP.NET Web Forms Developers 混亂的功能之一,就是與 ASP 時代極為類似的 View Rendering (顯示介面繪製) (來源:http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx):

 

 

雖然又有點像是義大利麵的寫法,但它沒有 ASP 本身的高度程式碼與介面混合的問題,只有 System.Web.Mvc.Html 的 HtmlHelper 會出現在 View 中,而因應 Model 和 Controller 直接做 View 的改變,也是 MVC 主要的核心功能之一,因此 ASP.NET MVC 使用這樣的設計法是相當棒的,它尤許開發人員直接以程式控制 HTML,而不再像是 Web Forms 還要經過層層的 Object Model/Events 來存取 HTML 本身。

 

不過在 ASP.NET MVC 1.0 時代,HtmlHelper 沒有辦法很聰明的直接透過 Model 本身的屬性來設定值 (例如 name 屬性):

 

image

 

顯示出來的是:

 

image

 

這對開發人員來說還是有一點不太方便,而且也容易發生打錯字而發生 HTTP Post 無法與 Model 對應的情況發生。針對這一點,ASP.NET MVC 2.0 提出了一個新的方法:Strong-typed HTML Helpers,它可以直接以 Model 的 type 來輸出 HTML 指令,最直接可以看到的改變就是 name 屬性,例如:

 

image

 

它的輸出是:

 

image

 

由於 Strong-typed 的支援,開發人員可以直接使用 Lambda Expression 的方式來設定 Model 的來源(或做一些額外的運算,這在 ASP.NET MVC 1.0 是不行的)。

 

image

 

所有支援 Strong-typed HTML Helper 的方法,都是以 Html.HtmlHelperFor() 的方法呈現,例如文字方塊是 Html.TextBoxFor(),下拉式方塊是 Html.DropDownListFor(),所有 MVC 2.0 支援的 Strong-typed HTML Helper 有:

 

繪製 HTML 標籤類:

  • Html.TextBoxFor()
  • Html.TextAreaFor()
  • Html.DropDownListFor()
  • Html.CheckboxFor()
  • Html.RadioButtonFor()
  • Html.ListBoxFor()
  • Html.PasswordFor()
  • Html.HiddenFor()
  • Html.LabelFor()

     

    其他類型:

  • Html.EditorFor()
  • Html.DisplayFor()
  • Html.DisplayTextFor()
  • Html.ValidationMessageFor()

     

    此功能未來可以在 Visual Studio 2008 (要安裝 MVC 2.0 runtime) 以及 Visual Studio 2010 同時支援,Visual Studio 2010 預設是使用 strong-typed view 來建立 view。例如使用下列的 Controller:

     

    image

     

    若要建立支援 strong-typed view,只要在新增 View 時設定使用 strong-typed HTML Helper (Create a strongly-typed view):

     

    image

     

    新建出來的 View 如下所示:

     

    image

     

    參考資料與圖示來源:

     

    http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx

    http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx