閱讀英文

共用方式為


ASP.NET MVC 3

(包括 2011 年 4 月工具更新)

ASP.NET MVC 3 是一種架構,可使用妥善建立的設計模式,以及 ASP.NET 和.NET Framework的強大功能來建置可調整、標準型 Web 應用程式。

它會與 ASP.NET MVC 2 並存安裝,因此立即開始使用!

在這裡下載 安裝程式

熱門功能

  • 可透過 NuGet 擴充整合式 Scaffolding 系統
  • 已啟用 HTML 5 的專案範本
  • 包含新 Razor 檢視引擎的表達檢視
  • 具有相依性插入和全域動作篩選的強大勾點
  • 具有不幹擾 JavaScript、jQuery 驗證和 JSON 系結的豐富 JavaScript 支援
  • 閱讀下方的完整功能清單

ASP.NET MVC 3 的新功能

安裝和說明

ASP.NET MVC 3 概觀 (英文)

ASP.NET MVC 3 建置在 ASP.NET MVC 1 和 2 上,新增可簡化程式碼並允許更深入擴充性的絕佳功能。 本主題提供此版本中包含的許多新功能概觀,並組織成下列各節:

使用 MvcScaffold 整合的可延伸 Scaffold

如果您完全不熟悉架構,新的 Scaffolding 系統可讓您更輕鬆地挑選並開始使用,並在您遇到且已經知道您所做的事時自動執行常見的開發工作。

新的 NuGet Scaffolding 套件支援此套件,稱為 MvcScaffolding。 許多軟體技術都會使用 「Scaffolding」 一詞來表示「快速產生您接著可編輯和自訂之軟體的基本大綱」。 我們為 ASP.NET MVC 建立的 Scaffolding 套件在數個案例中非常有説明:

  • 如果您是第一次學習 ASP.NET MVC,因為它可讓您快速取得一些實用且可運作的程式碼,然後根據您的需求編輯和調整。 它可讓您從查看空白頁面,並不知道要從何處開始!
  • 如果您知道 ASP.NET MVC,而且現在正在探索一些新的附加元件技術 ,例如物件關聯式對應程式、檢視引擎、測試程式庫等,因為這項技術的建立者可能也已為其建立 Scaffolding 套件。
  • 如果您的工作牽涉到重複建立某種類型的類似類別或檔案,因為您可以建立自訂 Scaffolder,以輸出測試裝置、部署腳本或您需要的任何其他專案。 小組中的每個人都可以使用您的自訂 Scaffolder。

MvcScaffolding 中的其他功能包括:

  • 支援 C# 和 VB 專案
  • 支援 Razor 和 ASPX 檢視引擎
  • 支援將 Scaffold 轉換成 ASP.NET MVC 區域,以及使用自訂檢視版面配置/主圖形
  • 您可以編輯 T4 範本,輕鬆地自訂輸出
  • 您可以使用自訂 PowerShell 邏輯和自訂 T4 範本來新增全新的 Scaffolder。 這些 (和您提供給這些參數的任何自訂參數,) 會自動出現在主控台索引標籤完成清單中。
  • 您可以取得 NuGet 套件,其中包含適用于不同技術的其他 Scaffolders (例如,現在有一個適用于LINQ to SQL的概念證明,現在) 並混合並將它們一起比對

ASP.NET MVC 3 工具更新包含此 Scaffolding 系統的絕佳 Visual Studio 支援,例如:

  • [新增控制器對話方塊] 現在支援建立、讀取、更新和刪除控制器動作和對應檢視的完整自動 Scaffold。 根據預設,此函式會使用 EF Code First 來建構資料存取代碼。
  • 新增控制器對話方塊可透過MvcScaffolding等 NuGet 套件支援可延伸的 Scaffold。 這可讓您將自訂 Scaffold 插入對話方塊,讓您針對其他資料存取技術建立 Scaffolds,例如 NHibernate,甚至是使用 ODBCDirect 的 JET!

如需 ASP.NET MVC 3 中 Scaffolding 的詳細資訊,請參閱下列資源:

HTML 5 專案範本

[新增專案] 對話方塊包含啟用 HTML 5 版專案範本的核取方塊。 這些範本會利用 Modernizr 1.7,在舊版瀏覽器中提供 HTML 5 和 CSS 3 的相容性支援。

Razor 檢視引擎

ASP.NET MVC 3 隨附名為 Razor 的新檢視引擎,可提供下列優點:

  • Razor 語法簡潔明瞭,需要最少的擊鍵。
  • Razor 很容易學習,一部分是因為其是以 C# 和 Visual Basic 等現有語言為基礎。
  • Visual Studio 包含 IntelliSense 和 Razor 語法的程式碼顏色標示。
  • Razor 檢視可以進行單元測試,而不需要您執行應用程式或啟動 Web 服務器。

一些新的 Razor 功能包括下列各項:

  • @model 用來指定要傳遞至檢視之型別的語法。
  • @* *@ 批註語法。
  • 指定預設 (的功能,例如 layoutpage 整個網站的) 一次。
  • Html.Raw顯示沒有 HTML 編碼之文字的方法。
  • 支援在多個檢視之間共用程式碼, (_viewstart.cshtml_viewstart.vbhtml 檔案) 。

Razor 也包含新的 HTML 協助程式,例如:

  • Chart. 轉譯圖表,提供與 ASP.NET 4 中圖表控制項相同的功能。
  • WebGrid. 轉譯資料格,其中包含分頁和排序功能。
  • Crypto. 使用雜湊演算法來建立正確 Salt 和雜湊的密碼。
  • WebImage. 呈現影像。
  • WebMail. 傳送電子郵件訊息。

如需 Razor 的詳細資訊,請參閱下列資源:

支援多個檢視引擎

ASP.NET MVC 3 中的 [ 新增檢 視] 對話方塊可讓您選擇要使用的檢視引擎,而 [ 新增專案 ] 對話方塊可讓您指定專案的預設檢視引擎。 您可以選擇 ASPX) 、Razor 或開放原始碼檢視引擎,例如SparkNHamlNDjango等Web Form檢視 (引擎。

控制器改善

全域動作篩選

有時候您想要在執行動作方法之前或動作方法執行之後執行邏輯。 若要支援此功能,ASP.NET MVC 2 提供的動作篩選器。 動作篩選準則是自訂屬性,可提供宣告式方法,可將動作前和動作後行為新增至特定的控制器動作方法。 不過,在某些情況下,您可能想要指定套用至所有動作方法的動作前或後置動作行為。 MVC 3 可讓您藉由將它們新增至 GlobalFilters 集合來指定全域篩選。 如需全域動作篩選的詳細資訊,請參閱下列資源:

新的 「ViewBag」 屬性

MVC 2 控制器支援 ViewData 屬性,可讓您使用晚期繫結字典 API 將資料傳遞至檢視範本。 在 MVC 3 中,您也可以使用稍微簡單的語法搭配 ViewBag 屬性來完成相同的用途。 例如,您可以撰寫 ,而不是撰寫 ViewData["Message"]="text"ViewBag.Message="text" 。 您不需要定義任何強型別類別,即可使用 ViewBag 屬性。 因為它是動態屬性,您可以改為只取得或設定屬性,並在執行時間動態解析它們。 在內部, ViewBag 屬性會儲存為字典中的 ViewData 名稱/值組。 (注意:在 MVC 3 的大多數發行前版本中, ViewBag 屬性的名稱 ViewModel 為 property.)

新的 「ActionResult」 類型

下列 ActionResult 類型和對應的協助程式方法是 MVC 3 中的新增或增強方法:

  • HttpNotFoundResult。 將 404 HTTP 狀態碼傳回給用戶端。
  • RedirectResult。 根據布林參數,傳回 (HTTP 302 狀態碼) 或永久重新導向 (HTTP 301 狀態碼) 。 與這項變更搭配使用時, Controller 類別現在有三個執行永久重新導向的方法: RedirectPermanentRedirectToRoutePermanentRedirectToActionPermanent 。 這些方法會傳回 的實例 RedirectResultPermanent 並將 屬性設定為 true
  • HttpStatusCodeResult。 傳回使用者指定的 HTTP 狀態碼。

JavaScript 和 Ajax 改善

根據預設,MVC 3 中的 Ajax 和驗證協助程式會使用不幹擾的 JavaScript 方法。 不幹擾的 JavaScript 可避免將內嵌 JavaScript 插入 HTML。 這可讓您的 HTML 變得更小且較不雜亂,並可讓您更輕鬆地交換或自訂 JavaScript 程式庫。 MVC 3 中的驗證協助程式預設也會使用 jQueryValidate 外掛程式。 如果您想要 MVC 2 行為,您可以使用 web.config 檔案設定來停用不幹擾的 JavaScript。 如需 JavaScript 和 Ajax 改善的詳細資訊,請參閱下列資源:

預設啟用Client-Side驗證

在舊版的 MVC 中,您必須從檢視明確呼叫 Html.EnableClientValidation 方法,才能啟用用戶端驗證。 在 MVC 3 中,由於預設會啟用用戶端驗證,因此不再需要此專案。 (您可以使用 web.config file.) 中的設定來停用此功能

為了讓用戶端驗證能夠運作,您仍然需要參考網站中適當的 jQuery 和 jQuery 驗證程式庫。 您可以在自己的伺服器上裝載這些程式庫,或從內容傳遞網路 (CDN) 參考這些程式庫,例如來自 Microsoft 或 Google 的 CDN。

遠端驗證程式

ASP.NET MVC 3 支援新的 RemoteAttribute 類別,可讓您利用 jQuery 驗證外掛程式的遠端驗證程式支援。 這可讓用戶端驗證程式庫自動呼叫您在伺服器上定義的自訂方法,以便執行只能完成伺服器端的驗證邏輯。

在下列範例中 Remote ,屬性會指定用戶端驗證會呼叫類別上 UsersController 名為 UserNameAvailable 的動作,以驗證 UserName 欄位。

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 屬性的詳細資訊,請參閱 MSDN 程式庫中 的 how to: Implement Remote Validation in ASP.NET MVC

JSON 系結支援

ASP.NET MVC 3 包含內建 JSON 系結支援,可讓動作方法接收 JSON 編碼的資料,並將它模型系結至 action-method 參數。 這項功能適用于涉及用戶端範本和資料系結的案例。 (用戶端範本可讓您使用在 client.) MVC 3 上執行的範本,來格式化和顯示單一資料項目或一組資料項目,可讓您輕鬆地在傳送和接收 JSON 資料的伺服器上,使用動作方法連接用戶端範本。 如需 JSON 系結支援的詳細資訊,請參閱Scott Guthrie MVC 3 Preview 部落格文章的JavaScript 和 AJAX 改善一節。

模型驗證改善

「DataAnnotations」 中繼資料屬性

ASP.NET MVC 3 支援 DataAnnotations 中繼資料屬性,例如 DisplayAttribute

「ValidationAttribute」 類別

類別 ValidationAttribute 已在 .NET Framework 4 中改善,以支援新的 IsValid 多載,以提供目前驗證內容的詳細資訊,例如正在驗證的物件。 這可讓您更豐富的案例,您可以在其中根據模型的另一個屬性來驗證目前的值。 例如,新的 CompareAttribute 屬性可讓您比較模型兩個屬性的值。 在下列範例中 ComparePassword ,屬性必須符合 Password 欄位才能有效。

public class User
{ 
    [Required]
    public string Password { get; set; } 
    [Required, Compare("Password")] 
    public string ComparePassword { get; set; } 
}

驗證介面

IValidatableObject介面可讓您執行模型層級驗證,而且可讓您提供整體模型狀態的特定驗證錯誤訊息,或在模型內的兩個屬性之間提供驗證錯誤訊息。 MVC 3 現在會在模型系結時,從 IValidatableObject 介面擷取錯誤,並使用內建 HTML 表單協助程式自動標幟或醒目提示檢視中受影響的欄位。

IClientValidatable介面可讓 ASP.NET MVC 在執行時間探索驗證程式是否支援用戶端驗證。 此介面已設計成可與各種驗證架構整合。

如需驗證介面的詳細資訊,請參閱Scott Guthrie 的 MVC 3 Preview 部落格文章的模型驗證改進一節。 不過, (請注意,部落格中 「IValidateObject」 的參考應該是 「IValidatableObject」。)

相依性插入改善

ASP.NET MVC 3 更能支援套用相依性插入 (DI) ,以及整合相依性插入或控制 (IOC) 容器的反轉。 DI 的支援已新增至下欄區域:

  • 控制器 (註冊和插入控制器處理站、將控制器插入) 。
  • 檢視 (註冊和插入檢視引擎,將相依性插入檢視頁面) 。
  • 動作篩選 (尋找和插入篩選) 。
  • 模型系結器 (註冊和插入) 。
  • 模型驗證提供者 (註冊和插入) 。
  • 模型中繼資料提供者 (註冊和插入) 。
  • 值提供者 (註冊和插入) 。

MVC 3 支援 Common Service Locator 程式庫,以及支援該程式庫 IServiceLocator 介面的任何 DI 容器。 它也支援新的 IDependencyResolver 介面,可讓您更輕鬆地整合 DI 架構。

如需 MVC 3 中 DI 的詳細資訊,請參閱下列資源:

其他新功能

NuGet 整合

ASP.NET MVC 3 會自動安裝並啟用 NuGet 作為其設定的一部分。 NuGet 是免費的開放原始碼套件管理員,可讓您輕鬆地在專案中尋找、安裝及使用 .NET 程式庫和工具。 它適用于所有 Visual Studio 專案類型, (包括 ASP.NET Web Forms 和 ASP.NET MVC) 。

NuGet 可讓維護開放原始碼專案的開發人員 (,例如 Moq、NHibernate、Ninject、StructureMap、NUnit、一般、RhinoMocks 和 Elmah) 封裝其程式庫,並在線上資源庫中註冊這些專案。 然後,想要使用其中一個程式庫的 .NET 開發人員很容易找到套件,並將其安裝在他們正在處理的專案中。

透過 ASP.NET 3 Tools Update,專案範本包含預先安裝的 JavaScript 程式庫 NuGet 套件,因此可透過 NuGet 進行更新。 Entity Framework Code First 也會預先安裝為 NuGet 套件。

如需 NuGet 的詳細資訊,請參閱 NuGet 文件 (英文)。

Partial-Page輸出快取

ASP.NET MVC 自第 1 版起支援完整頁面回應的輸出快取。 MVC 3 也支援部分頁面輸出快取,這可讓您輕鬆地快取回應的區域或片段。 如需快取的詳細資訊,請參閱MVC 3 版本資訊中 Scott Guthrie 部落格文章的部分頁面輸出快取一節和MVC 3 版本資訊中的子動作輸出快取一節。

對要求驗證的細微控制

ASP.NET MVC 具有內建要求驗證,可自動協助防範 XSS 和 HTML 插入式攻擊。 不過,有時候您想要明確停用要求驗證,例如,如果您想要讓使用者在部落格專案或 CMS 內容中張貼 HTML 內容 (,例如,在部落格專案或 CMS 內容) 。 您現在可以將 AllowHtml 屬性新增至模型或檢視模型,以在模型系結期間停用每個屬性的要求驗證。 如需要求驗證的詳細資訊,請參閱下列資源:

可延伸的 [新增專案] 對話方塊

在 ASP.NET MVC 3 中,您可以將專案範本、檢視引擎和單元測試專案架構新增至 [ 新增專案 ] 對話方塊。

範本 Scaffolding 改善

ASP.NET MVC 3 Scaffolding 範本會更妥善地識別模型的主鍵屬性,並適當地處理它們,而不是舊版 MVC。 (例如,Scaffolding 範本現在會確定主鍵未 Scaffold 為可編輯的表單欄位。)

根據預設,建立和編輯 Scaffolds 現在會使用 Html.EditorFor 協助程式,而不是 Html.TextBoxFor 協助程式。 這可改善當 [ 加入檢 視] 對話方塊產生檢視時,模型上中繼資料的格式支援。

「Html.LabelFor」 和 「Html.LabelForModel」 的新多載

已針對 LabelForLabelForModel Helper 方法新增方法多載。 新的多載可讓您指定或覆寫標籤文字。

無會話控制器支援

在 ASP.NET MVC 3 中,您可以指出是否要控制器類別使用會話狀態,如果是的話,會話狀態應該是讀取/寫入還是唯讀。 如需無會話控制器支援的詳細資訊,請參閱 MVC 3 版本資訊

新增 「AdditionalMetadataAttribute」 類別

您可以使用 AdditionalMetadata 屬性來填 ModelMetadata.AdditionalValues 入模型屬性的字典。 例如,如果檢視模型有應該只向系統管理員顯示的屬性,您可以批註該屬性,如下列範例所示:

public class ProductViewModel 
{
    [AdditionalMetadata("AdminOnly", true)]
    public string RefundCode {get; set;}
}

轉譯產品檢視模型時,此中繼資料可供任何顯示或編輯器範本使用。 您可以解譯中繼資料資訊。

AccountController 改善

網際網路專案範本中的 AccountController 已大幅改善。

新增內部網路專案範本

包含新的內部網路專案範本,可啟用 Windows 驗證並移除 AccountController。