以下是網友的轉載,介紹的還是比較詳細的:
預覽版是在.NET 3.5 SP1和VS 2008下工作的,可與ASP.NET MVC 1.0并行安裝在同一個機器上(即,它們不相沖突,如果你安裝2.0的話,你現有的ASP.NET MVC 1.0項目不會受影響)。如果你同時安裝ASP.NET MVC 1.0 和 ASP.NET MVC 2.0的話,你會在Visual Studio 2008的 “新項目” 對話框中看到2個ASP.NET MVC項目模闆:

DataAnnotation(資料标記)驗證支援
ASP.NET MVC 2現在包含了對最先在.NET 3.5 SP1中釋出的DataAnnotation驗證的内置支援,這個東西是在ASP.NET動态資料和.NET RIA服務中使用的。DataAnnotation提供了一個簡易的方式,可以聲明的方式在應用中的Model(模型)和ViewModel(視圖模型)類中添加驗證規則,在ASP.NET MVC中有自動的綁定和UI輔助方法驗證支援。
要看該特性如何在實際中使用,我們可以象下面這樣建立一個新的“Customer” 視圖模型類,内含5個屬性(是用了C#特性之一 -- 自動屬性來實作的)。
然後,我們可以使用System.ComponentModel.DataAnnotations命名空間下的DataAnnotation特性,在這些屬性上飾于适當的驗證規則。下面的代碼使用了4種不同的内置驗證規則: Required], [StringLength], [Range], 和 [RegularExpression]。該命名空間下還包括一個基類,ValidationAttribute, 你可以繼承來建立你自己的定制驗證特性。
然後,我們可以建立一個CustomersController類,其中有2個 Create action方法。第一個 Create action方法處理對應于“/Customers/Create” URL的HTTP GET請求,基于一個空白的Customer對象顯示一個視圖模闆。第二個 Create action方法則處理同個URL的HTTP POST請求,并接受一個Customer對象作為方法參數。它會檢查送出的輸入資料是否造成了任何模型綁定錯誤,如果造成了錯誤的話,它會使用已經輸入的資料重新顯示視圖模闆,如果沒錯誤的話,它會給使用者顯示一個送出成功了的視圖:
ASP.NET MVC 2預覽版的釋出說明詳述了如何将現有的ASP.NET MVC 1.0項目更新到使用V2,如果你想将它們移植來利用V2的新特性的話。
新特性
ASP.NET MVC V2将包括一堆新功能和特性(其中一些已經在ASP.NET MVC産品路線圖網頁上列出了)。今天的“第一個預覽版”包括的一些新特性還是第一次露面,更多的特性将在将來的預覽版中出現。第一個預覽版的代碼還屬于早期版本,開發團隊今天釋出這個版本,意在開始征詢大家的回報,并将它們融入将來的版本。
下面簡短地說明一下其中一些新功能:
<b>區域支援</b>
ASP.NET MVC 2将支援一個叫“區域(areas)”的新特性,允許你輕松地将MVC應用的功能進行分割群組合。
“區域”提供了一個将控制器和視圖進行分組的方式,允許你把一個大應用的各個子部分相對獨立地進行建構。每個區域可以一個單獨的ASP.NET MVC項目的形式來實作,并且這些項目可進而為主應用所引用。這在建造大應用時有助于管理其複雜性,并友善多個團隊合作開發應用。
第一個預覽版隻包括了區域特性實作的第一個部分,還不包括任何工具支援(目前,你隻能手工添加編譯任務來建立并配置區域項目)。将來的預覽版本将包括工具支援,同時進一步将功能集擴大和完善。
最後,我們可以在上面任意一個Create action方法中右擊,選擇 “添加視圖”上下文菜單指令,自動地生成(scaffold)一個基于Customer對象的“Create”視圖模闆的架構。這麼做的話,生成的架構視圖模闆會包含下面這樣一個HTML <form>:
這樣,當我們在浏覽器中請求“/Customers/Create” URL時,我們會得到象下面這樣起始的空白表單:
The above form will redisplay with error messages each time the user enters invalid input and attempts to perform a form post.
如果你不希望直接标記你的模型或視圖模型類,你還可以建立一個伴随你的模型類的“夥伴類(buddy class)”,另外封裝DataAnnotaton規則。這個功能還在這樣一些場景下有用: VS直接生成/更新類的屬性代碼,你無法簡易地在生成的代碼上飾以特性(例如,由LINQ to SQL 或 LINQ to Entities設計器生成的類)。
除了提供對DataAnnotations的内置支援外,ASP.NET MVC V2中的DefaultModelBinder類現在還有新的虛拟方法,可以在子類中覆寫,來輕松地內建其他的驗證架構( 例如Castle Validator, EntLib Validation等等)。ASP.NET MVC中的驗證UI輔助方法是設計來支援任何類型的驗證架構的(它們不用知道DataAnnotations)。
強類型UI輔助方法
ASP.NET MVC V2包含了新的HTML UI輔助方法,這些輔助方法允許你在引用視圖模闆的模型對象時使用強類型的lambda表達式。這可以促成更好的視圖編譯時檢查(這樣缺陷是在編譯時發現而不是在運作時發現),還能促成視圖模闆中更好的代碼intellisense支援。
你可以在下面看到一個示範更好intellisense的例子,注意我在使用新的Html.EditorFor()輔助方法時是如何得到Customer模型對象屬性的完整清單的:
第一個預覽版提供對新的Html.EditorFor(), Html.LabelFor(), 和 Html.DisplayFor() 輔助方法的内置支援。将在這個星期釋出的更新過的MVC Futures程式集還将包含對另外的Html.TextBoxFor(), Html.TextAreaFor(), Html.DropDownListFor(), Html.HiddenFor(), 和 Html.ValidationMessageFor()輔助方法的支援(随着時間的推移,這些方法也會移到核心ASP.NET MVC 2程式集中去)。
在下面,你可以看到Customer建立場景下“Create”視圖模闆的一個更新了的版本。注意,在UI輔助方法中,我們不是使用字元串表達式來引用Customer對象,而是使用強類型的lambda表達式。我們在所有這些方法中都可以得到完整的 intellisense 和 編譯時檢查:
上面的Html.LabelFor()輔助方法生成<label for="Name">Name:</label> HTML 辨別。
Html.EditorFor()輔助方法可以用于任何資料類型值。在預設情形下,它很聰明,會根據要編輯的類型輸出合适的HTML <input/>元素。譬如,它會為上面的前4個屬性(是字元串和整數類型)生成<input type=”text”/>元素,會為最後的那個“IsActive” 屬性生成<input type=”checkbox”/>元素,因為這個屬性是布爾值類型。
除了支援簡單的資料類型外,Html.EditorFor()輔助方法還允許你傳遞給它擁有多個屬性的比較複雜的對象。在預設情形下,它會對對象的所有公開屬性進行循環,輸出<label>, <input/> 元素,以及它能找到的每個屬性的任何合适的驗證消息。例如,我們可以重寫上面的視圖,對Customer對象隻做單個Html.EditorFor()調用,從概念上來說輸出跟上面一樣的辨別:
強類型的輔助方法允許你在Customer視圖類的屬性上飾以[DisplayName]特性,來控制為每個屬性輸出的标簽字元串(例如:不是用“IsActive”作為标簽文字,我們可以加一個[DisplayName(“Is Active Customer:”)]特性)。
你也可以加一個[ScaffoldColumn(false)]特性,來表示,在象上面把一個複雜的對象傳給Html.EditorFor()那樣的場景下,某個特定的屬性完全不應該顯示出來。
UI 輔助方法模闆化支援
Html.EditorFor() 和 Html.DisplayFor() 輔助方法對顯示标準的資料類型以及含有多個屬性的複雜對象有内置的支援。就象上面說的,它們還支援通過在視圖模型上施加象[DisplayName]和 [ScaffoldColumn]特性這樣的基本的定制機制。
但經常地,開發人員想要能夠進一步定制UI輔助方法的輸出,對生成的東西要有完全的控制。Html.EditorFor() 和 Html.DisplayFor()輔助方法通過一個模闆化機制支援這個要求,這個機制允許你定義外部的模闆,替換原先的,完全控制顯示的輸出。更棒的是,你還可以在每個資料類型/類的基礎上定制要顯示的内容。
在第一個預覽版中,你可以在\Views\[控制器名稱]目錄下(如果你想要定制某個特定的控制器所用視圖的顯示的話)或在\Views\Shared目錄下(如果你想要定制一個應用中所有視圖和控制器的顯示的話)加一個“EditorTemplates” 或者 “DisplayTemplates” 子目錄。
然後你可以往這些目錄中加分模闆(partial template)檔案,針對個别資料類型或者類來定制顯示輸出。例如,在下面,我在\Views\Shared目錄下加了一個EditorTemplates子目錄,在其中加了三個定制的模闆檔案:
上面的“Customer.ascx”模闆表示我想要定制在調用Html.EditorFor()時其參數為Customer對象時的輸出(例如,我可以定制Customer屬性的精确順序和布局)。上面的“DateTime.ascx” 模闆表示我想要定制在調用Html.EditorFor()時其參數為DateTime屬性時的輸出(例如,我也許想要使用JavaScript的月曆控件,而不是普通的文本框)。我也可以在目錄中加一個“Object.ascx” 模闆,如果我想要替代所有對象的預設顯示的。
除了在每個類的基礎上定制輸出外,你還可以在目錄中加“具名模闆(named templates)”。一個常見的場景也許是 “CountryDropDown”模闆,它處理字元串資料類型,但不是提供标準的文本框,而是顯示一個使用者可以選擇的列出了國家名稱值的<select>下拉框。下面是這個編輯器模闆的一個例子:
然後,我們可以在調用Html.EditorFor()輔助方法時,把上面這個模闆的名稱作為參數傳給它,明确地表示我們想要使用這個模闆。例如,在下面,除了指定Country屬性的lambda表達式外,我們還指定了在顯示時要使用的編輯器模闆的名稱:
或者,你也可以在你的ViewModel屬性和類型上指定“UIHint”特性。這允許你在單一一個地方指定要使用的預設編輯器或者顯示器模闆,然後在整個應用的所有視圖中使用指定的模闆(而不必顯式地将這個名稱作為參數傳給Html.EditorFor)。
下面是一個如何使用UIHint特性來表示Customer.Country屬性(字元串類型)應該在預設情形下顯示時使用CountryDropDown模闆的例子:
一旦在我們的視圖模型上設定上述特性後,在使用Html.EditorFor()顯示那個屬性時,我們就不再需要顯式指定模闆名稱了。現在,在/Customers/Create URL上點選重新整理時,我們的Country屬性就會顯示為一個下拉框,而不是一個标準的文本框:
<b>其他酷特性</b>
ASP.NET MVC 2第一個預覽版還包含了若幹個雖小但是很妙的特性。我最喜愛的幾個包括:
<b> 新的[HttpPost]特性</b>
在 ASP.NET MVC中,把一個URL的處理分成2個action方法的做法是非常常見的,其中一個處理GET請求,另一個處理POST請求。
在ASP.NET MVC 1中,你使用[AcceptVerbs(HttpVerbs.Post)]特性來表示action方法的“Post”版本:
在ASP.NET MVC 2中這依然工作,但你現在也可以利用更簡潔的[HttpPost]特性來做同樣的事情:
<b>預設參數值</b>
處理可省參數在web場景中是司空見慣的事。在ASP.NET MVC 1中,處理可省參數一般有2個做法,通過注冊定制的路徑規則,在其中指定預設的值,或者将某個action方法的參數标記為nullable,然後在action方法中添加代碼處理該參數是否是null(如果是null就提供預設值)。
ASP.NET MVC 2第一個預覽版現在支援在action方法的參數上飾以System.ComponentModel命名空間下的DefaultValueAttribute。這允許你在某個參數不在請求值中時指定ASP.NET MVC應該傳給action方法的參數值。例如,下面是一個我們可以如何處理 /Products/Browse/Beverages 和 /Products/Browse/Beverages?page=2 URLs的例子,如果“page”參數不是查詢字元串的一部分時,其值為“1”:
VB今天就允許你直接在語言中指定預設的參數值(而不必象上面那樣顯式指定DefaultValue特性),VS2010中的C#語言也将支援可省參數的預設值,将允許我們把上面的代碼簡化成:
這應該會使處理預設/可省場景變得非常地幹淨利落。
<b>綁定二進制資料</b>
ASP.NET MVC 2的第一個預覽版還加了支援綁定base64編碼的字元串值到類型為byte[]和System.Data.Linq.Binary的屬性。現在還有2個可以接受這些資料類型的重載的Html.Hidden()版本。在你想要在應用中啟用并發性控制,在表單中來回傳送資料庫行記錄的時間戳(timestamp)值的場景下,這會非常有用。
<b>結語</b>
點選這裡下載下傳包含一個ASP.NET MVC 2項目的.zip檔案,該項目實作了我在上面示範的樣例。
今天的ASP.NET MVC 2版本還隻是第一個預覽版,将來的預覽版中将包括更多的特性,開發團隊期待在如何改進和增強功能方面得到許許多多的回報。
版權
作者:靈動生活 郝憲玮
如果你認為此文章有用,請點選底端的【推薦】讓其他人也了解此文章,
本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。