﻿# ASP.NET MVC 2 Preview 1 已經推出，新版功能搶先預覽

ASP.NET MVC 2 Preview 1 已經推出，新版多了 [Templated Helpers](http://go.microsoft.com/fwlink/?LinkId=159062) 的概念，如果對熟悉 Dynamic Data 的人來說應該會覺得很熟悉，概念非常類似，這個功能讓 ASP.NET MVC 對 HTML 的操控能力又更上一層，有興趣的人可以閱讀 [ASP.NET MVC 2 Preview 1 Release Note](http://go.microsoft.com/fwlink/?LinkID=154411) 或看看 [Hanselminutes on 9 - ASP.NET MVC 2 Preview 1 with Phil Haack and Virtual Scott](http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-ASPNET-MVC-2-Preview-1-with-Phil-Haack-and-Virtual-Scott/) 影片，看 [Phil Haack](http://haacked.com/) 如何用他的大螢幕(雙螢幕)展示 ASP.NET MVC 2 Preview 1 的新功能。

主要的新功能特色有：

**1\. Templated Helpers**

-   讓你在 View 中顯示資料欄位時，可依據欄位的 DataType 決定要顯示的 HTML，概念跟 Dynamic Data 的 FieldTemplate 類似，只是這是專屬於 ASP.NET MVC 的版本。
-   總之，這是個**超酷**的特色，用了才知道好啊！

**2\. Areas**

-   允許你讓較大型的 ASP.NET MVC 切割成多的不同的**子專案**，每個子專案都有自己的 Controller 與 Views
-   每個**子專案**都是「相對獨立」的 ASP.NET MVC 網站，可有效分割專案，讓多人開發的 ASP.NET MVC 專案的管理性大幅提昇。

**3\. Support for Data Annotations**

-   [Data Annotations](http://msdn.microsoft.com/zh-tw/library/system.componentmodel.dataannotations.aspx) 可讓你集中管理**資料欄位格式的驗證**與**商業邏輯的驗證**，徹底簡化程式的複雜度，而這項功能也是在 Dynamic Data 中必備的元素，只是這次才正式搬進 ASP.NET MVC
-   ASP.NET MVC 2 Preview 1 已將 [Data Annotations](http://msdn.microsoft.com/zh-tw/library/system.componentmodel.dataannotations.aspx) 支援整合到 default model binder 中，所以已經內建可以進行 Server 端驗證了，至於 Client 端驗證的機制可能要等下一版才會出現，而且將會使用 [jQuery Validation plugin](http://docs.jquery.com/Plugins/Validation) 當成表單驗證程式的基礎。

**4\. Strongly Typed UI Helpers**

-   雖然 Strongly Typed UI Helpers 早在 ASP.NET MVC 1.0 Future 就出現，不過以後應該會正式加入所有 MVC 版本中，包括這次 ASP.NET MVC 2 Preview 1
-   使用 Strongly Typed UI Helpers 可讓你在 View 中使用 Intellisense 功能方便開發，以及可以在編譯時(compile-time)發現程式的錯誤。
-   只要是 HTML Helpers 的方法名稱(method name)最後有補上 “For” 的就是 Strongly Typed UI Helpers 了！ 如下圖示：  
     ![<%= Html.EditorFor(c=>c.Country, "CountryDropDown") %>](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c3eb2c946821aecdf790-image_6.png "<%= Html.EditorFor(c=>c.Country, \"CountryDropDown\") %>")

**5\. New \[HttpPost\] Attribute**

-   新增的 HttpPostAttribute 方便你套用特定 Action 必須使用 HTTP POST 呼叫。
-   這個新的 Attribute 可以取代之前的 **\[AcceptVerbs(HttpVerbs.Post)\]** 用法

**6\. Default Parameter Values**

-   **預設參數值**也是個新的設計，在以往 ASP.NET MVC 1.0 在開發時，如果傳入參數為**實值型別**(Value Type)時，若沒有傳入適當的 Route Value 就會導致 MVC 發生例外事件，現在只要指定**預設參數值**就不會有此問題了。
-   在以往我們可能要這樣寫：  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/47c8460ad41f0744a133-image_9.png)
-   現在我們可以這樣寫：  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/1132c1d28e2d6841f4d9-image_12.png)
-   如果未來你用 .NET 4.0 ( C# 4.0 ) 甚至可以這樣寫  
    ![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/99c6b8c62ccdc909bd7e-image_15.png)

**7\. Binding Binary Data**

-   此版還支援二進位資料格式的 Binding，他可以將 Base64 編碼的資料格式從表單傳入時，自動透過 Default Model Binder 轉譯成目的資料型別，例如：byte\[\] , System.Data.Linq.Binary 等資料類型。
-   這類二進位欄位由於 HTML 表單的限制，通常只能利用隱藏欄位(Hidden Field)搭配儲存，通常用來作為**同步控制(concurrency control)**或簡易的 CAPTCHA 等用途。

對於 ASP.NET MVC 的版本發展，將會在 ASP.NET MVC Roadmap 不定期更新，ASP.NET MVC 開發人員可以來這邊看看。

我個人覺得目前 ASP.NET MVC 在架構上已經很完整了，接下來要發展的東西都只會讓 ASP.NET MVC 專案越來越好開發與管理，請各位拭目以待。但愛用工具列拖曳的人可能會失望，因為 ASP.NET MVC 目前來說完全沒看到有任何**所見即所得**的開發工具發展的跡象，短期內也應該不會有，還是建議各位多學點 HTML, CSS, JavaScript 吧，這些東西才是網頁開發的基礎啊！

ASP.NET MVC 2.0 預計將隨 Visual Studio 2010 RTM 出貨，但是 ASP.NET MVC 2.0 也會提供 Visual Studio 2008 Service Pack 1 的版本，所以不想升級到 VS2010 的人不必太擔心，我個人還在等 [WPF 對中文字形的顯示問題](http://social.msdn.microsoft.com/Forums/zh-TW/230/thread/c0ac5051-e307-44f2-b5bf-ceddd9baf99f)解決了之後才會採用 WPF-based 的產品。

**相關連結**

-   [ScottGu](http://weblogs.asp.net/scottgu/) on [ASP.NET MVC V2 Preview 1 Released](https://weblogs.asp.net/scottgu/asp-net-mvc-v2-preview-1-released) 
-   [Phil Haack](http://haacked.com/) on [ASP.NET MVC 2 Preview 1 Released](http://haacked.com/archive/2009/07/30/asp.net-mvc-released.aspx) and [Single Project Areas With ASP.NET MVC 2 Preview 1](http://haacked.com/archive/2009/07/31/single-project-areas.aspx)
-   [ASP.NET MVC 2 Preview 1 Download](http://go.microsoft.com/fwlink/?LinkID=154409)
-   [ASP.NET MVC 2 Preview 1 Release Note](http://go.microsoft.com/fwlink/?LinkID=154411)
-   ASP.NET MVC Roadmap
-   [Hanselminutes on 9 - ASP.NET MVC 2 Preview 1 with Phil Haack and Virtual Scott](http://channel9.msdn.com/posts/Glucose/Hanselminutes-on-9-ASPNET-MVC-2-Preview-1-with-Phil-Haack-and-Virtual-Scott/)
-   [ASP.NET Dynamic Data Field Templates Overview](http://msdn.microsoft.com/en-us/library/cc488523.aspx)
-   [Walkthrough: Using Templated Helpers to Display Data](http://go.microsoft.com/fwlink/?LinkId=159062)
-   [Walkthrough: Organizing an ASP.NET MVC Application by Logical Areas](http://msdn.microsoft.com/en-us/library/ee307987%28VS.100%29.aspx)
-   [How to: Validate Model Data Using DataAnnotations Attributes](http://msdn.microsoft.com/en-us/library/ee256141%28VS.100%29.aspx)
-   [System.ComponentModel.DataAnnotations 命名空間](http://msdn.microsoft.com/zh-tw/library/system.componentmodel.dataannotations.aspx)
-   [Validating with Data Annotation Validators](http://www.asp.net/learn/mvc/tutorial-39-cs.aspx)
-   [Eilon Lipton's Blog](https://weblogs.asp.net/leftslipper/)
-   [ASP.NET MVC Forum](http://forums.asp.net/1146.aspx)
-   [ASP.NET MVC Overview on MSDN](http://msdn.microsoft.com/en-us/library/dd381412%28VS.100%29.aspx)
-   [ASP.NET MVC Reference Documentation on MSDN](http://msdn.microsoft.com/en-us/library/system.web.mvc%28VS.100%29.aspx)
-   [ASP.NET MVC website](http://asp.net/mvc)
-   [ASP.NET CodePlex site](https://github.com/aspnet/AspNetWebStack)
-   [ASP.NET MVC Forums](http://forums.asp.net/1146.aspx)
