ASP.NET MVC 3 新特性

來源:互聯網
上載者:User

ASP.NET MVC 3 新特性
 

有人譯有人轉:

這個簡單的詮釋了MVC3的新功能。

==================================================================

導言
ASP.NET MVC3 在 ASP.NET MVC 1 和 2 的基礎上,增加了大量的特性,使得代碼更加簡化,並且可以深度擴充。這篇文章提供包含在此次發布中的許多新特性的說明,分為以下部分:

•Razor 視圖引擎
•支援多視圖引擎
•Controller 改進
•JavaScript 和 Ajax
•Model 驗證的改進
•依賴注入 Dependency Injection 的改進
•其他新特性
Razor 視圖引擎
ASP.NET MVC3 帶來了一種新的名為 Razor 的視圖引擎,提供了下列優點:

•Razor 的文法簡單且清晰,只需要最小化的輸入
•Razor 容易學習,文法類似於 C# 和 VB
•Visual Studio 對於 Razor 提供了智能提示和文法著色
•Razor 視圖不需要允許程式或者啟動 Web 服務器就可以進行測試
Razor 現在提供了一些新的特徵:

•@model 用來指定傳到視圖的 Model 類型
•@*  * 注釋文法
•對於整個網站可以一次性設定預設項目,例如布局。
•Html.Raw 方法提供了沒有進行 HTML 編碼的輸出
•支援在多個視圖之間共用代碼 ( _viewstart.cshtml 或者 _viewstart.vbhtml )
Razor 還包含新的  HTML Helper,例如:

•Chart. 組建圖表
•WebGrid, 產生資料表格,支援完整的分頁和排序
•Crypto,使用 Hash 演算法來建立 Hash 和加鹽的口令
•WebImage, 產生圖片
•WebMail, 寄送電子郵件
關於 Razor 更多的資料,可以參考下面的資源:

•Scott Guthrie's blog post introducing Razor
•Scott Guthrie's blog post introducing the @model keyword
•Scott Guthrie's blog post introducing Razor layouts
•Razor API Quick Reference
•MVC 3 Release Notes
支援多視圖引擎
 在 ASP.NET MVC3 中,增加視圖的對話方塊中允許你選擇你希望的視圖引擎,在建立項目對話方塊中,你可以指定項目預設的視圖引擎,可以選擇 WebForm,Razor,或者開源的視圖引擎,例如:Spark, NHaml, 或者 NDjango.

控制器的改進
 全域的 Action 過濾器
有的時候你希望能夠在在一個 Action 方法執行之前或者執行之後執行一些處理邏輯,在 ASP.NET MVC2 中,提供了 Action 過濾器,允許對特定控制器的 Action 方法進行處理,實際上,有時候你希望對所有的 Action 都進行類似的處理,MVC3 允許你將過濾器加入到 GlobalFilters 集合中來建立全域的過濾器,詳細的介紹,參考下列資源:

•Scott Guthrie's blog on the MVC 3 Preview
•Filtering in ASP.NET MVC
新的 ViewBag 屬性
MVC2 中的控制器支援 ViewData 屬性,允許通過後綁定的字典將資料傳送給視圖模板,在 MVC3 中,你可以通過 ViewBag 來更加簡單的完成。例如,對於 ViewData["Message"] = "text",你可以通過 ViewBag.Message = "text" 來完成。你不需要通過類來定義任何強型別的屬性,因為這是動態屬性,在內部,ViewBag 屬性以名-值對的形式儲存在 ViewData 字典中。注意,在許多預發布版本中,這個屬性被稱為 ViewModel。

新的 ActionResult 類型
下面的 ActionResult 類型在 MVC3 中是新增的或者被擴充的。

•HttpNotFoundResult. 向用戶端返回 404 HTTP 狀態.
•RedirectResult. 基於一個布爾型的參數,返回一個臨時的重新導向 (HTTP 302 status code) 或者持久的重新導向 (HTTP 301 status code),  結合這個改進,,  Controller 提供了三個方法來支援持久的重新導向: RedirectPermanent, RedirectToRoutePermanent, 和 RedirectToActionPermanent. 這些方法返回一個 Permanent  屬性為真的 RedirectResult 對象執行個體。
•HttpStatusCodeResult. 返回使用者指定的 HTTP 狀態代碼。
JavaScript 和 Ajax 改進
 預設情況下,在 MVC3 中,Ajax 和驗證使用不令人信服的 unobtrusive  的 JavaScript 方式。unobtrusive  不會在 HTML 中插入行內的 JavaScript ,這使得 HTML 更加精簡和更少幹擾,也使得更加容易被替換和定製 JavaScript 庫,在 MVC3 中,驗證助手預設使用 jQuery.Validate 外掛程式完成,如果你希望使用 MVC2 的行為,你可以在 web.config 中通過配置來關閉 unobtrusive ,更多的資訊參考下列資源:

•Basic introduction to unobtrusive JavaScript on the Wikipedia site
•Brad Wilson's Unobtrusive JavaScript Post
•Brad Wilson's Unobtrusive JavaScript Validation Post
•Creating a MVC 3 Application with Razor and Unobtrusive JavaScript (tutorial on the ASP.NET site)
•MVC 3 Release Notes
預設啟用了用戶端驗證
 在早先版本的 MVC 中,你需要在視圖中顯式調用 Html.EnableClientValidation 方法來啟用用戶端驗證。在 MVC3 中,已經不再需要了,因為預設就會啟用用戶端驗證。可以在 web.config 中關閉。

為了使得用戶端驗證工作,你仍然需要在網站中加入對 jQuery 和 jQuery.Validation 庫的引用,你可以在自己的網站中提供,或者使用 Microsoft 或者 Google 的 CDN 伺服器。

遠程驗證
ASP.NET 3 通過一個新的標籤 RemoteAttribute 對 jQuery Validation 外掛程式的遠程驗證提供支援。這允許用戶端的驗證庫自動調用一個你定義在伺服器上的自訂的方法來完成只能在伺服器上完成的驗證邏輯。

在下面的例子中,Remote 標籤指定了通過一個定義在 UsersController 中名為 UserNameAvailable 的方法來驗證使用者名稱欄位。

public class User 
{
    [Remote("UserNameAvailable", "Users")]
    public string UserName { get; set; }
}
下面的代碼定義在控制器中

public class UsersController 

    public bool UserNameAvailable(string username) 
    { 
        if(MyRepository.UserNameExists(username)) 
        { 
            return "false"; 
        } 
        return "true"; 
    } 
}
關於 Remote 屬性的更多資源,參考  How to: Implement Remote Validation in ASP.NET MVC

JSON 綁定支援
ASP.NET MVC3 包含內建的 JSON 綁定支援,允許 Action 方法接收 JSON 編碼的資料並且模型化為 Action 的參數。這個能力經常被用於用戶端的模板和資料繫結中。用戶端模板允許你通過用戶端的模板來格式化和顯示一個或者多個資料,MVC3 允許你簡單的串連用戶端模板和伺服器端的 Action 方法,通過 JSON 來發送和接收資料,更多的資訊參考:Scott Guthrie's MVC 3 Preview blog post.

Model 驗證的改進
DataAnnotations 中繼資料標籤
ASP.NET MVC3 支援 DataAnnotations 中繼資料標籤,例如:DisplayAttribute。

ValidationAttribute 類
在 .NET Framework4 中被改進 的ValidationAttribute 類支援新的 IsValid 重載,提供關於當前驗證內容相關的更多資訊,例如什麼對象被驗證了。這允許你基於 Model 的其他屬性來驗證當前值,例如,新的 CompareAttribute 就允許你比較 Model 的兩個屬性的值,在下面的例子中,ComparePassword 屬性必須匹配 Password 欄位來同通過驗證。

public class User

    [Required]
    public string Password { get; set; } 
    [Required, Compare("Password")] 
    public string ComparePassword { get; set; } 
}
驗證介面
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:

•控制器 (registering and injecting controller factories, injecting controllers).
•視圖 (registering and injecting view engines, injecting dependencies into view pages).
•Action 過濾器 (locating and injecting filters).
•Model 綁定器 (registering and injecting).
•Model 驗證提供器 (registering and injecting).
•Model 中繼資料提供器 (registering and injecting).
•Value 提供器 (registering and injecting).
MVC3 支援  Common Service Locator 庫和任何支援這個庫的 IServiceLocator 介面的 DI 容器。也支援新的容易整合到 DI 架構的 IDependencyResolver  介面。

更多關於 DI 的資訊,參考:

•Brad Wilson's series of blog posts on Service Location
•MVC 3 Release Notes
其他新特性
 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 來支援在綁定的時候基於一個屬性關閉請求驗證。更多地資料參考:

• Scott Guthrie's blog post on the MVC 3 release candidate 中 Unobtrusive JavaScript and Validation 一節.
•MVC 3 Release Notes
可擴充的建立項目對話方塊
在 MVC3 中,你可以增加項目模板,視圖引擎,單元測試項目架構到建立項目對話方塊中。

腳手架的改進
MVC3 中的腳手架對於主鍵提供了更好的支援,例如,腳手架的模板不會將主鍵加入的編輯表單中了。

預設情況下,建立和編輯的腳手架現在使用 Html.EditorFor 助手來替代 Html.TextBoxFor 助手,這個改進在增加視圖對話方塊產生一個視圖的時候,支援模型中的中繼資料標籤。

對於 Html.LabelFor 和 Html.LabelForModel 的新重載
對於 LabelFor 和 LabelForModel 增加了新的方法重載,允許指定或者重寫 Label 文本。

無 Session 的控制器支援
MVC3 中可以指定控制器是否使用 Session 狀態,進而,Session 是否是讀寫還是唯讀。

新的 AdditionalMetadataAttribute 類
可以通過 AdditionalMetadataAttribute 標籤對 Model 的一個屬性訪問 ModelMetadata.AdditionalValues 字典,例如,如果模型的某個屬性僅僅支援管理員顯示,你可以如下設定:

public class ProductViewModel 
{
    [AdditionalMetadata("AdminOnly", true)]
    public string RefundCode {get; set;}
}
當使用產品的 Model 來產生的時候,這個中繼資料將被任何顯示或者編輯模板使用,這允許你來解釋中繼資料資訊。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.