[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 屬性):
顯示出來的是:
這對開發人員來說還是有一點不太方便,而且也容易發生打錯字而發生 HTTP Post 無法與 Model 對應的情況發生。針對這一點,ASP.NET MVC 2.0 提出了一個新的方法:Strong-typed HTML Helpers,它可以直接以 Model 的 type 來輸出 HTML 指令,最直接可以看到的改變就是 name 屬性,例如:
它的輸出是:
由於 Strong-typed 的支援,開發人員可以直接使用 Lambda Expression 的方式來設定 Model 的來源(或做一些額外的運算,這在 ASP.NET MVC 1.0 是不行的)。
所有支援 Strong-typed HTML Helper 的方法,都是以 Html.HtmlHelperFor() 的方法呈現,例如文字方塊是 Html.TextBoxFor(),下拉式方塊是 Html.DropDownListFor(),所有 MVC 2.0 支援的 Strong-typed HTML Helper 有:
繪製 HTML 標籤類:
其他類型:
此功能未來可以在 Visual Studio 2008 (要安裝 MVC 2.0 runtime) 以及 Visual Studio 2010 同時支援,Visual Studio 2010 預設是使用 strong-typed view 來建立 view。例如使用下列的 Controller:
若要建立支援 strong-typed view,只要在新增 View 時設定使用 strong-typed HTML Helper (Create a strongly-typed view):
新建出來的 View 如下所示:
參考資料與圖示來源:
http://weblogs.asp.net/scottgu/archive/2010/01/10/asp-net-mvc-2-strongly-typed-html-helpers.aspx