ASP.NET MVC 1
view接收用戶輸入,把命令傳到controller
controller處理命令,更新model
model被更新后,會通知view需要update
view更新后向用戶顯示
ASP.NET MVC 2
由於mvc1中,model可以通知view,然后view就可以被更新,這在windows程序中很常見,像MFC的frame-document-view架構,
如果document改變了,他會主動通知view進行update
但是在web中,作為model的java bean更新后,無法調用作為view的jsp(而且view通常很多,需要選一個),因此改為mvc2模式:
view接收用戶輸入,把命令傳到controller
controller處理命令,更新model
model被更新后,controller會選一個view並forward到這個jsp,附帶把model放到request參數
這個view獲得model然后顯示
ASP.NET MVC 3
ASP.NET MVC3 在 ASP.NET MVC 1 和 2 的基礎上,增加了大量的特性,使得代碼更加簡化,並且可以深度擴展。這篇文章提供包含在此次發布中的許多新特性的說明.
* Razor 視圖引擎
ASP.NET MVC3 帶來了一種新的名為 Razor 的視圖引擎,提供了下列優點:
Razor 現在提供了一些新的特征:
Razor 還包含新的 HTML Helper,例如:
* 支持多視圖引擎
在 ASP.NET MVC3 中,增加視圖的對話框中允許你選擇你希望的視圖引擎,在新建項目對話框中,你可以指定項目默認的視圖引擎,可以選擇 WebForm,Razor,或者開源的視圖引擎,
例如:Spark, NHaml, 或者 NDjango.
* 控制器的改進
全局的 Action 過濾器
有的時候你希望能夠在在一個 Action 方法執行之前或者執行之后執行一些處理邏輯,在 ASP.NET MVC2 中,提供了 Action 過濾器,允許對特定控制器的 Action 方法進行處理,
實際上,有時候你希望對所有的 Action 都進行類似的處理,MVC3 允許你將過濾器加入到 GlobalFilters 集合中來創建全局的過濾器.
* 新的 ViewBag 屬性
MVC2 中的控制器支持 ViewData 屬性,允許通過后綁定的字典將數據傳送給視圖模板,
MVC3 中,你可以通過 ViewBag 來更加簡單的完成。
例如,對於 ViewData["Message"] = "text",你可以通過 ViewBag.Message = "text" 來完成。你不需要通過類來定義任何強類型的屬性,因為這是動態屬性,
在內部,ViewBag 屬性以名-值對的形式保存在 ViewData 字典中。注意,在許多預發布版本中,這個屬性被稱為 ViewModel。
* JavaScript 和 Ajax 改進
默認情況下,在 MVC3 中,Ajax 和驗證使用不引人注目的 unobtrusive 的 JavaScript 方式。
unobtrusive 不會在 HTML 中插入行內的 JavaScript ,這使得 HTML 更加精簡和更少干擾,也使得更加容易被替換和定制 JavaScript 庫,
在 MVC3 中,驗證助手默認使用 jQuery.Validate 插件完成,如果你希望使用 MVC2 的行為,你可以在 web.config 中通過配置來關閉 unobtrusive .
* 默認啟用了客戶端驗證
在早先版本的 MVC 中,你需要在視圖中顯式調用 Html.EnableClientValidation 方法來啟用客戶端驗證。
在 MVC3 中,已經不再需要了,因為默認就會啟用客戶端驗證。可以在 web.config 中關閉。
為了使得客戶端驗證工作,你仍然需要在網站中加入對 jQuery 和 jQuery.Validation 庫的引用,你可以在自己的網站中提供,或者使用 Microsoft 或者 Google 的 CDN 服務器。
* 遠程驗證
ASP.NET 3 通過一個新的標簽 RemoteAttribute 對 jQuery Validation 插件的遠程驗證提供支持。
這允許客戶端的驗證庫自動調用一個你定義在服務器上的自定義的方法來完成只能在服務器上完成的驗證邏輯。
關於 Remote 屬性的更多資源,參考 How to: Implement Remote Validation in ASP.NET MVC http://msdn.microsoft.com/en-us/library/gg508808(VS.98).aspx
* JSON 綁定支持
ASP.NET MVC3 包含內置的 JSON 綁定支持,允許 Action 方法接收 JSON 編碼的數據並且模型化為 Action 的參數。
這個能力經常被用於客戶端的模板和數據綁定中。客戶端模板允許你通過客戶端的模板來格式化和顯示一個或者多個數據,
MVC3 允許你簡單的連接客戶端模板和服務器端的 Action 方法,通過 JSON 來發送和接收數據,更多的信息參考:Scott Guthrie's MVC 3 Preview blog post.
* ValidationAttribute 類
在 .NET Framework4 中被改進 的ValidationAttribute 類支持新的 IsValid 重載,提供關於當前驗證上下文的更多信息,例如什么對象被驗證了。
這允許你基於 Model 的其他屬性來驗證當前值,例如,新的 CompareAttribute 就允許你比較 Model 的兩個屬性的值,
在下面的例子中,ComparePassword 屬性必須匹配 Password 字段來同通過驗證。
* Model 驗證的改進
DataAnnotations 元數據標簽
ASP.NET MVC3 支持 DataAnnotations 元數據標簽,例如:DisplayAttribute。

1 public class User 2 { 3 [Required] 4 public string Password { get; set; } 5 6 7 [Required, Compare("Password")] 8 public string ComparePassword { get; set; } 9 }
* 驗證接口
IValidatableObject 接口允許執行 Model 水平的驗證,並且允許你提供整個模型狀態的驗證錯誤信息,或者基於 Model 的兩個屬性。
當 Model 綁定的時候,MVC3 從 IValidatableObject 接收錯誤信息,在視圖中使用內建的 HTML 助手時,將會自動標識或者高亮受影響的字段。
IClientValidatable 接口允許 ASP.NET MVC 在運行時發現支持的客戶端驗證器,這個接口被用來支持集成不同的驗證框架。
更加關於驗證接口的內容,參考 Scott Guthrie's MVC 3 Preview blog post 中 Model Validation Improvements 一節。
* 依賴注入Dependency Injection 的改進
ASP.NET MVC3 提供了更好的 DI 和 IoC 支持,在下面的地方支持 DI:
MVC3 支持 Common Service Locator 庫和任何支持這個庫的 IServiceLocator 接口的 DI 容器。也支持新的容易集成到 DI 框架的 IDependencyResolver 接口。
其他新特性
* NuGet 集成
ASP.NET MVC3 自動安裝和啟用 NuGet ,NUGet 是免費開源的一個包管理器,
使得在你的項目中容易發現,安裝,和使用 .NET 庫。它可以和所有的 Visual Studio 項目類型一起工作,包括 ASP.NET WebForm 和 MVC。
NuGet 允許開發者維護開源項目,例如,像 Moq 項目,NHibernate 等等,可以注冊它們到一個在線的網站中。
更多信息參考:NuGet documentation on the CodePlex site.
* 部分頁的輸出緩存
ASP.NET MVC 從版本1 開始支持整頁緩存,MVC3 還提供了部分頁緩存。
這可以允許你容易地緩存輸出的一個區域或者片斷,
更多地內容參考 Scott Guthrie's blog post on the MVC 3 release candidate 中 Partial Page Output Caching 段落,
還有 MVC 3 Release Notes 中 Child Action Output Caching 段落。
* 在請求驗證中的粒度控制
ASP.NET MVC 內建了請求驗證機制來自動幫助處理類似跨站攻擊和 HTML 注入等等。
實際上,有時你希望能夠顯式關閉請求的驗證,例如你希望允許用戶提交 HTML 內容,例如在內容管理系統中,
現在你可以通過增加 AllowHtml 標簽到 Model 或者視圖的 Model 來支持在綁定的時候基於一個屬性關閉請求驗證。更多地資料參考:
* 可擴展的新建項目對話框
在 MVC3 中,你可以增加項目模板,視圖引擎,單元測試項目框架到新建項目對話框中。
* 腳手架的改進
MVC3 中的腳手架對於主鍵提供了更好的支持,例如,腳手架的模板不會將主鍵加入的編輯表單中了。
默認情況下,創建和編輯的腳手架現在使用 Html.EditorFor 助手來替代 Html.TextBoxFor 助手,這個改進在增加視圖對話框生成一個視圖的時候,支持模型中的元數據標簽。
對於 Html.LabelFor 和 Html.LabelForModel PDF的新重載
對於 LabelFor 和 LabelForModel 增加了新的方法重載,允許指定或者重寫 Label 文本。
* 無 Session 的控制器支持
MVC3 中可以指定控制器是否使用 Session 狀態,進而,Session 是否是讀寫還是只讀。
* 新的 AdditionalMetadataAttributePDF 類
ASP.NET MVC4.0
重點分析:新添WebAPI,Mobile Application,以及Single Page Application.
WebAPI與SinglePage Application之中,目前view只支持Razer語法。
WebAPI:其實就是一中建立在RESTful服務基礎上的平台,當然一定是HTTP的協定。當您建立好一個空的Web API的MVC項目后,
在Controller中你會出現一個新的類別ApiController設定,它先幫你制作 Get(), Post(),Put(), Delete() 等方法,
其中 Get() 有一個是Overloading傳回IEnumerable<T> 的方法,這也是Web API主要強大的特性之一,強行別的HttpWebRequest.
首先JQuery以及其他的一些腳本版本進行了升級,當然也移除了微軟自己的AJAX庫。使用HTML5來布局。
ASP.NET Web API(支持Rest風格接口)
ASP.NET Single Page Application(單頁面應用程序)
Enhancements to Default Project Templates(完善了項目模板)
Mobile Project Template(手機項目模板)
參考文章:http://www.cnblogs.com/liwei823/archive/2011/10/14/2212569.html
http://blog.csdn.net/ymnets/article/details/7653144