共用方式為


ASP.NET MVC 3 版本資訊

概觀

本文件描述 Visual Studio 2010 的 ASP.NET MVC 3 RTM 版本。 ASP.NET MVC 是開發使用 Model-View-Controller (MVC) 模式之 Web 應用程式的架構。 ASP.NET MVC 3 安裝程式包含下列元件:

  • ASP.NET MVC 3 執行階段元件
  • ASP.NET MVC 3 Visual Studio 2010 工具
  • ASP.NET Web Pages 執行階段元件
  • ASP.NET Web Pages Visual Studio 2010 工具
  • .NET 的 Microsoft Package Manager (NuGet)
  • Visual Studio 2010 的更新,可支援 Razor 語法。 (如需詳細資訊,請參閱知識庫文件 2483190)。

您可以在下列 URL 的 ASP.NET 網站上找到每個發行前版本 ASP.NET MVC 3 的完整版本資訊:

https://www.asp.net/learn/whitepapers/mvc3-release-notes

安裝注意事項

若要使用 Web Platform Installer 安裝 ASP.NET MVC 3 RTM,請造訪下列頁面:

https://www.microsoft.com/web/gallery/install.aspx?appid=MVC3

或者,您可以從下列頁面下載 Visual Studio 2010 的 ASP.NET MVC 3 RTM for Visual Studio 2010 安裝程式:

https://go.microsoft.com/fwlink/?LinkID=208140

ASP.NET MVC 3 可以安裝,並可與 ASP.NET MVC 2 並存執行。

軟體需求

ASP.NET MVC 3 執行階段元件需要下列軟體:

  • .NET Framework 4 版。

    ASP.NET MVC 3 Visual Studio 2010 工具需要下列軟體:

  • Visual Studio 2010 或 Visual Web Developer 2010 Express。

文件集

MSDN 網站上提供 ASP.NET MVC 的說明文件,網址如下:

https://go.microsoft.com/fwlink/?LinkId=205717

ASP.NET 網站的 MVC 頁面上提供 ASP.NET MVC 的教學課程和其他資訊,網址如下:

https://www.asp.net/mvc/

支援

這是完全支援的版本。 如需獲得技術支援的相關資訊,請造訪 Microsoft 支援網站

您也可以在 ASP.NET MVC 論壇張貼有關此版本的問題,其中 ASP.NET 社群的成員經常能夠提供非正式的支援:

https://forums.asp.net/1146.aspx

將 ASP.NET MVC 2 專案升級至 ASP.NET MVC 3 工具更新

ASP.NET MVC 3 可以與同一部電腦上的 ASP.NET MVC 2 並存安裝,這可讓您彈性地選擇何時將 ASP.NET MVC 2 應用程式升級至 ASP.NET MVC 3。

若要手動將現有的 ASP.NET MVC 2 應用程式升級至第 3 版,請執行下列動作:

  1. 在電腦上建立新的空白 ASP.NET MVC 3 專案。 此專案將包含升級所需的一些檔案。

  2. 將下列檔案從 ASP.NET MVC 3 專案複製到 ASP.NET MVC 2 專案的對應位置。 您必須更新 jQuery 程式庫的任何參考,以納入考慮新檔名 (jQuery-1.5.1.js):

    • /Views/Web.config
    • /packages.config
    • /scripts/*.js
    • /Content/themes/*.*
  3. 將空白 ASP.NET MVC 3 專案方案根目錄中的套件資料夾複製到方案的根目錄中,其位於解決方案 .sln 檔案所在的目錄中。

  4. 如果您的 ASP.NET MVC 2 專案包含任何區域,請將 /Views/Web.config 檔案複製到每個區域的 Views 資料夾。

  5. 在 ASP.NET MVC 2 專案中的兩個 Web.config 檔案中,全域搜尋並取代 ASP.NET MVC 版本。 找到以下內容:

    System.Web.Mvc, Version=2.0.0.0
    

    取代成下列文字:

    System.Web.Mvc, Version=3.0.0.0
    
  6. 在 [方案總管] 中,刪除 System.Web.Mvc 參考 (從第 2 版指向 DLL),然後新增 System.Web.Mvc (v3.0.0.0) 的參考。

  7. 新增參考至 System.Web.WebPages.dll 和 System.Web.Helpers.dll。 這些組件位於下列資料夾中:

    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET MVC 3\Assemblies
    • %ProgramFiles%\ Microsoft ASP.NET\ASP.NET Web Pages\v1.0\Assemblies
  8. 在 [方案總管] 中,以滑鼠右鍵按一下專案名稱,然後選取 [卸載專案]。 然後再次以滑鼠右鍵按一下專案名稱,並選取編輯 ProjectName.csproj。

  9. 找出 ProjectTypeGuids 元素,並將 {F85E285D-A4E0-4152-9332-AB1D724D3325} 取代為 {E53F8FEA-EAE0-44A6-8774-FFD645390401}。

  10. 儲存變更,以滑鼠右鍵按一下專案,然後選擇 [重新載入專案]。

  11. 在應用程式的根 Web.config 檔案中,將下列設定新增至組件區段。

    <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, 
         PublicKeyToken=31BF3856AD364E35" />
    
    <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral,
         PublicKeyToken=31BF3856AD364E35" />
    
  12. 如果專案參考使用 ASP.NET MVC 2 編譯的任何第三方程式庫,請將下列醒目提示的 bindingRedirect 元素新增至組態區段下應用程式根目錄中的 Web.config 檔案:

    <runtime>
       <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
           <assemblyIdentity name="System.Web.Mvc"
               publicKeyToken="31bf3856ad364e35"/>
           <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0"/>
         </dependentAssembly>
       </assemblyBinding>
    </runtime>
    

ASP.NET MVC 3 工具更新中的變更

本小節描述自 ASP.NET MVC 3 RTM 版本以來,ASP.NET MVC 3 工具更新版本中所做的變更。

[新增控制器] 對話方塊現在可以搭配檢視和資料存取程式碼來建構控制器

Scaffolding 是快速為您的應用程式產生控制器和檢視的方式。 產生程式碼之後,可以供您進行編輯以符合專案的需求。

若要在 ASP.NET MVC 3 中啟動新增控制器對話方塊,請以滑鼠右鍵按一下方案總管中的 Controllers 資料夾,按一下新增,然後按一下控制器。 已增強對話方塊,並提供其他建構選項。

[新增控制器] 對話方塊的螢幕擷取畫面。

預設有三個建構範本可供使用。

空白控制器

此範本會產生空白控制器檔案。 此範本作用等同於不會檢查在舊版 ASP.NET MVC 中新增用於建立、編輯、詳細資料、刪除案例的動作。 如果您選擇此選項,則沒有其他選項可供使用。

控制器搭配空白讀取/寫入動作

此範本會產生控制器檔案,其中包含所有必要的動作方法,但方法中沒有任何實作程式碼。 此範本作用等同於檢查在舊版 ASP.NET MVC 中新增用於建立、編輯、詳細資料、刪除案例的動作。 如果您選擇此選項,則沒有其他選項可供使用。

控制器搭配讀取/寫入動作和檢視,使用 Entity Framework

此範本可讓您快速建立可執行的資料輸入使用者介面。 它會產生可處理一系列常見需求和情境的程式碼,例如:

  • 資料存取。 產生的程式碼會讀取和寫入資料庫中的實體。 如果您選擇現有的資料內容類別,或是讓範本產生新的 DbContext 類別,它就會使用 Entity Framework Code First 方法。 如果您選擇現有的 ObjectContext 類別,則它也適用於 Entity Framework Database First 或 Model First 方法。

  • 驗證。 產生的程式碼會使用 ASP.NET MVC 模型繫結和中繼資料功能,以便根據模型類別上宣告的規則來驗證表單提交。 這包括內建的驗證規則,例如 RequiredStringLength 屬性,以及自訂驗證規則。

  • 一對多關聯。 如果您在模型類別之間定義一對多外鍵關聯性,產生的程式碼會產生下拉式清單來選取相關實體。 例如,您可以定義下列模型類別,以遵循 Entity Framework Code First 慣例:

    public class Product
    {
         public int ProductId { get; set; }
         [Required]
         public string Name { get; set; }
    
         // Product belongs to Category
         public int CategoryId { get; set; }
         public virtual Category Category { get; set; }
    }
    public class Category
    {
         public int CategoryId { get; set; }
         [Required]
         public string Name { get; set; }
    }
    

    當您接著建構 Product 類別的控制器時,其檢視將可讓分別為每個 Product 執行個體選擇 Category 物件。

    此範本可在新增控制器對話方塊中啟用其他選項。 處理 Model 類別時,您可以選擇方案中的任何模型類別,這會決定使用者能夠建立或編輯的資料類型:

  • 如果您想要使用 Entity Framework Code First,您可以選擇任何模型類別。

  • 如果您使用 Entity Framework Database First 或 Entity Framework Model First,請務必選擇在概念模型中定義的實體類別。

處理 Data Context類別時,您可以進行下列選擇:

  • 如果您要使用 Code First 且沒有現有的資料內容類別,請選擇**新增資料內容**。 然後,系統會為您產生資料內容類別。
  • 如果您想要使用 Code First 並擁有現有的資料內容類別,請在這裡選擇它。 系統會更新它,並保存您選取的模型類別。
  • 如果您要使用 Database First 或 Model First,請在這裡選擇您的物件內容類別。

如果要執行 [檢視],則選擇您想要使用的檢視引擎,或是在不想要建構任何檢視時選擇 [無]。

您可以選取 [進階選項],以指定所產生檢視的進一步選項。 例如,您可以選擇要使用的版面配置或主版頁面。

[ASP.NET MVC 3 新增專案] 對話方塊的改進功能

您用來建立新 ASP.NET MVC 3 專案的對話方塊包含多項改進功能,如下所示。

[新增專案] 對話方塊,其中 [內部網络應用程式] 圖示和 [使用 H T M L 5 語意標記] 核取方塊反白顯示的螢幕擷取畫面。

新增「內部網路專案」範本

[專案範本] 清單包含新的內部網路應用程式範本。 此範本包含使用 Windows 驗證建置 Web 應用程式的設定,而不是使用表單驗證。 因為內部網路應用程式需要一些無法封裝在專案範本中的 IIS 設定,因此範本會包含讀我檔案,其中包含如何讓專案範本在 IIS 中運作的指示。 MSDN 網站上的新增內部網路應用程式範本檔位於下列 URL:

https://msdn.microsoft.com/library/gg703322(VS.98).aspx

專案範本現在已啟用 HTML5

[新增專案] 對話方塊現在包含一個選項,可將 HTML5 特定功能新增至專案範本。 選取選項會導致產生包含新 HTML5 <header><footer><navigation> 元素的檢視。

請注意,舊版瀏覽器不支援 HTML5 特定的標記。 為了解決這項限制,HTML5 專案範本包含 Modernizr 程式庫的參考。 (請參閱下一節)。

專案範本現在包括 Modernizr 1.7

Modernizr 是 JavaScript 程式庫,可在尚未支援這些功能的瀏覽器中支援 CSS 3 和 HTML5。 此程式庫隨 ASP.NET MVC 3 專案範本預安裝的 NuGet 套件提供。 如需 Modernizr 的詳細資訊,請參閱 http://www.modernizr.com/

專案範本包含 jQuery、jQuery UI 和 jQuery 驗證的更新版本

專案範本現在包含下列版本的 jQuery 指令碼:

  • jQuery 1.5.1
  • jQuery 驗證 1.8
  • jQuery UI 1.8.11

這些程式庫已隨預安裝的 NuGet 套件提供。

專案範本現在包括 ADO.NET Entity Framework 4.1 做為預安裝的 NuGet 套件

ADO.NET Entity Framework 4.1 包含 Code First 功能。 Code First 是 ADO.NET Entity Framework 的新開發模式,可提供現有 Database First 和 Model First 模式的替代方案。

Code First 著重於使用以 Visual Basic 或 C# 撰寫的 POCO 類別 (全然舊版 CLR 物件) 來定義模型。 然後,這些類別可以對應至現有的資料庫,或用來產生資料庫架構。 您可以使用 DataAnnotations 屬性或使用 Fluent API 來提供其他組態。

使用 Code Firstwith ASP.NET MVC 的文件可從下列 URL 的 ASP.NET 網站取得:

https://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part1-cs https://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp-net-mvc-application

專案範本包括 JavaScript 程式庫做為預安裝的 NuGet 套件

當您建立新的 ASP.NET MVC 3 專案時,專案會包含先前所述的 JavaScript 檔案 (例如 Modernizr 程式庫),方法是使用 NuGet 安裝它們,而不是直接將指令碼新增至專案範本內容中的指令碼資料夾。 這可讓您在發行新版本的指令碼時使用 NuGet 將指令碼更新為最新版本。

例如,假設新增 jQuery 版本的頻率,則包括在專案範本中的 jQuery 版本將會在某個時間點過期。 不過,由於 jQuery 已隨已安裝的 NuGet 套件提供,因此當有較新版本的 jQuery 可用時,您會在 [NuGet] 對話方塊中收到通知。

因為 jQuery 會在檔名中包含版本號碼,因此將 jQuery 更新為最新版本時也需要更新參考 jQuery 檔案的 <script> 的標記,才能使用新的檔名。 其他包含的指令碼程式庫不會在指令碼名稱中包含版本號碼,因此可以更輕鬆地更新為最新版本。

ASP.NET MVC 3 中的已知問題

  • 在某些情況下,安裝可能會失敗,並出現錯誤訊息「安裝失敗,並出現錯誤碼 (0x80070643)」錯誤訊息。 如需如何解決此問題的詳細資訊,請參閱知識庫文章 2531566
  • 新增控制器的 Scaffolding 不會使用 Entity Framework 中的實體繼承支援來建立 Scaffold 實體。 例如,假設 Student 類別繼承的基底 Person 類別,建構 Student 類別時將會產生不會編譯的程式碼。
  • 在方案資料夾中建立新的 ASP.NET MVC 3 專案會導致 NullReferenceException 錯誤。 因應措施是在解決方案根目錄中建立 ASP.NET MVC 3 專案,然後將它移至方案資料夾。
  • 安裝 ReSharper 時,Razor 語法的 IntelliSense 無法運作。 如果您已安裝 ReSharper,而且想要利用 ASP.NET MVC 3 中的 Razor IntelliSense 支援,請參閱 Hadi Hariri 部落格上的 Razor Intellisense 和 ReSharper,在其中討論今天一起使用的方式。
  • 在安裝期間,[EULA 接受] 對話方塊會在小於預期大小的視窗中顯示授權條款。
  • 當您編輯 Razor 檢視時 (.cshtml 或 .vbhtml 檔案) 進行檢視。 ASP.NET MVC 3 不包含 Razor 檢視的任何程式碼片段...aspx 選擇 ASP.NET MVC 的程式碼片段時將會顯示程式碼片段
  • 如果您在未安裝 Visual Studio 的電腦上安裝 ASP.NET MVC 3 for Visual Web Developer Express,然後稍後安裝 Visual Studio,您必須重新安裝 ASP.NET MVC 3。 ASP.NET MVC 3 安裝程式升級的 Visual Studio 會和 Visual Web Developer Express 共用元件。 如果您在沒有 Visual Web Developer Express 的電腦上安裝 ASP.NET MVC 3 for Visual Studio,然後稍後安裝 Visual Web Developer Express,則適用相同的問題。

ASP.NET MVC 3 RTM 中的變更

本小節描述自 RC2 版本以來,ASP.NET MVC 3 RTM 版本中所做的變更和錯誤修正。

變更:已更新 jQuery UI 版本成 1.8.7

Visual Studio 的 ASP.NET MVC 專案範本已更新為包含最新版的 jQuery UI 程式庫。 範本也包含 jQuery UI 所需的最小資源檔集合,例如相關聯的 CSS 和影像檔。

變更:已將預設的 ModelMetadataProvider 變更成 DataAnnotationsModelMetadataProvider

ASP.NET MVC 3 的 RC2 版本引進了 CachedDataAnnotationsMetadataProvider 類別,提供現有 DataAnnotationsModelMetadataProvider 類別的快取來改善效能。 不過,此實作報告了一些錯誤,因此變更已還原並移至 MVC Futures 專案,請前往 ASP.NET WebStack 下載。

已修正:貼上包含空白字元的 Razor 運算式部分會導致反轉

在 ASP.NET MVC 3 的發行前版本中,當您將包含空白文字的 Razor 運算式部分貼到 Razor 檔案時,產生的運算式會反轉。 例如,請考慮下列 Razor 程式碼區段:

@SomeMethod("first param",
100)
@AnotherMethod()

如果您在第一個方法中選取文字「first param」,並將它貼到第二個方法中作為引數,結果如下所示:

@AnotherMethod(param""first)

正確行為是貼上作業後應會產生下列結果:

@AnotherMethod("first param")

RTM 版本中已修正此問題,以便在貼上作業期間正確保留運算式。

已修正:重新命名已在編輯器中開啟的 Razor 檔案會停用語法顏色標示和 IntelliSense

在編輯器視窗中開啟檔案時,使用 [方案總管] 重新命名 Razor 檔案會導致語法醒目提示,IntelliSense 停止處理該檔案。 已修正此問題,在重新命名之後可保留醒目提示和 IntelliSense。

ASP.NET MVC 3 RTM 的已知問題

  • 如果您在 NuGet 套件管理員主控台開啟時關閉 Visual Studio 2010 SP1 Beta,Visual Studio 會當機並嘗試重新啟動。 這個問題將在 Visual Studio 2010 SP1 的 RTM 版本中修正。
  • ASP.NET MVC 3 安裝程式只能安裝 NuGet 套件管理員的初始版本。 安裝初始版本之後,可以使用 Visual Studio 擴充功能管理員來安裝及更新 NuGet。 如果您已安裝 NuGet,請移至 Visual Studio 擴充功能庫以更新至最新版本的 NuGet。
  • 在方案資料夾中建立新的 ASP.NET MVC 3 專案會導致 NullReferenceException 錯誤。 因應措施是在解決方案根目錄中建立 ASP.NET MVC 3 專案,然後將它移至方案資料夾。
  • 安裝程式可能需要比舊版 ASP.NET MVC 更久才能完成。 這是因為它會更新 Visual Studio 2010 的元件。
  • 安裝 ReSharper 時,Razor 語法的 IntelliSense 無法運作。 如果您已安裝 ReSharper,而且想要利用 ASP.NET MVC 3 中的 Razor IntelliSense 支援,請參閱 Hadi Hariri 部落格上的 Razor Intellisense 和 ReSharper,在其中討論今天一起使用的方式。
  • 以 Beta 版 ASP.NET MVC 3 建立的 CCSHTML 和 VBHTML 檢視未正確設定其建置動作,因此在發佈專案時會省略這些檢視類型。 這些檔案的 [建置動作] 值應該設定為 [內容]。 ASP.NET MVC 3 RTM 會為新檔案修正此問題,但不會修正使用發行前版本所建立專案的既有檔案設定。
  • [屬性] 對話方塊中開啟建置動作功能表。已選取內容選項的螢幕擷取畫面。
  • 在安裝期間,[EULA 接受] 對話方塊會在小於預期大小的視窗中顯示授權條款。
  • 當您編輯 Razor 檢視 (cshtml 檔案) 時,Visual Studio 中的 [移至控制器] 功能表項目將無法使用,而且沒有程式碼片段。
  • 如果您在未安裝 Visual Studio 的電腦上安裝 ASP.NET MVC 3 for Visual Web Developer Express,然後稍後安裝 Visual Studio,您必須重新安裝 ASP.NET MVC 3。 ASP.NET MVC 3 安裝程式升級的 Visual Studio 會和 Visual Web Developer Express 共用元件。 如果您在沒有 Visual Web Developer Express 的電腦上安裝 ASP.NET MVC 3 for Visual Studio,然後稍後安裝 Visual Web Developer Express,則適用相同的問題。

ASP.NET MVC 3 中的重大變更

  • 在舊版的 ASP.NET MVC 中,除了少數情況,每個要求都會建立動作篩選條件。 我們從不保證一定會產生相同行為,我們只是實作詳細資料,且篩選條件的合約就是將其視為沒有任何狀態。 在 ASP.NET MVC 3 中,篩選會更積極進行快取。 因此,任何不當儲存執行個體狀態的自訂動作篩選可能會中斷。
  • 例外狀況篩選的執行順序已變更為具有相同 Order 值的例外狀況篩選條件。 在 ASP.NET MVC 2 和更早版本中,在動作方法的例外狀況篩選之前,在動作方法的例外狀況篩選之前,會執行與動作方法上相同 Order 值的控制器例外狀況篩選。 這通常是在沒有指定 Order 值的情況下套用例外狀況篩選的情況。 在 ASP.NET MVC 3 中,此順序已反轉,因此最特定的例外狀況處理程式會先執行。 如同更早版本,如果明確指定 Order 屬性,則會依指定的順序執行篩選。
  • 名為 FileExtensions 的新屬性已新增至 VirtualPathProviderViewEngine 基底類別。 當 ASP.NET 依路徑查詢檢視時 (不是依名稱),只會考慮此新屬性所指定清單中副檔名的檢視。 這是登錄自訂組建提供者的應用程式的重大變更,可為 Web Form 檢視啟用自訂副檔名,而提供者會使用完整路徑而非名稱參考這些檢視。 因應措施是修改 FileExtensions 屬性的值,可包含自訂副檔名。
  • 直接實作 IControllerFactory 介面的自訂控制器處理站實作必須提供此版本中新增至介面的新增 GetControllerSessionBehavior 方法實作。 一般而言,建議您不要直接實作此介面,而是從 DefaultControllerFactory 衍生類別。

ASP.NET MVC 3 RC2 中的變更

本小節描述自 RC 版本以來,ASP.NET MVC 3 RC2 版本中所做的變更 (新增功能和錯誤修正)。

專案範本已變更為包含 jQuery 1.4.4、jQuery 驗證 1.7 和 jQuery UI 1.8.6

ASP.NET MVC 3 的專案範本現在包含最新版本的 jQuery、jQuery 驗證和 jQuery UI。jQuery UI 是專案範本的新增專案,並提供實用的使用者介面小工具。 如需 jQuery UI 的詳細資訊,請造訪其首頁:http://jqueryui.com/

已新增「AdditionalMetadataAttribute」類別

您可以使用 AdditionalMetadataAttribute 類別來填入模型屬性的 ModelMetadata.AdditionalValues 字典。

例如,假設檢視模型具有應該只能對系統管理員顯示的屬性。 該模型可以使用 AdminOnly 作為索引鍵和 true 作為值,以新的屬性加上註解,如下列範例所示:

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

當呈現產品檢視模型時,此中繼資料可供任何顯示或編輯器範本使用。 身為應用程式開發人員的您,可以解譯中繼資料資訊。

改進檢視建構

用於 Scaffolding 檢視的 T4 範本現在會產生對範本協助程式方法的呼叫,例如 EditorFor,而不是 TextBoxFor 之類的協助程式。 當 [新增檢視] 對話方塊產生檢視時,此變更會以資料註記屬性的形式改進支援模型中繼資料。

[新增檢視] 建構時也會包含根據慣例,改進模型主要索引鍵資訊的偵測和使用方式。 例如,[新增檢視] 對話方塊會使用這項資訊,以確保主鍵值不會以可編輯的表單欄位形式進行 Scaffold 處理。

預設的 [編輯] 和 [建立] 範本包含用戶端驗證所需的 jQuery 指令碼參考。

已新增 Html.Raw 方法

根據預設,Razor 檢視引擎會對所有值進行 HTML 編碼。 例如,下列程式碼片段會將問候語變數內的 HTML 進行編碼,使其在頁面中顯示為 <strong>Hello World!</strong>

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@greeting</p>

新的 Html.Raw 方法提供在已知內容安全時顯示未編碼 HTML 的簡單方式。 下列範例會顯示相同的字串,但字串會呈現為標記:

@{
  string greeting = "<strong>Hello World!</strong>";
}

<p>@Html.Raw(greeting)</p>

已將「Controller.ViewModel」屬性和「View」屬性重新命名為「ViewBag」

先前,ControllerViewModel 屬性會對應至檢視的 View 屬性。 這兩個屬性都可讓您使用動態屬性存取子語法,存取 ViewDataDictionary 物件的值。 這兩個屬性都已重新命名為相同名稱,以免混淆,操作起來會更一致。

已將「ControllerSessionStateAttribute」類別重新命名為「SessionStateAttribute」

ControllerSessionStateAttribute 類別是在 ASP.NET MVC 3 的 RC 版本中所引進。 屬性已重新命名,使用起來更簡潔。

已將 RemoteAttribute「Fields」屬性重新命名為「AdditionalFields」

RemoteAttribute 類別的 Fields 屬性在使用者之間造成一些混淆。 將此屬性重新命名為 AdditionalFields,釐清其設計用意。

已將「SkipRequestValidationAttribute」重新命名為「AllowHtmlAttribute」

SkipRequestValidationAttribute 屬性已重新命名為 AllowHtmlAttribute,更能代表其預定的使用方式。

已變更「Html.ValidationMessage」方法成顯示第一個有用的錯誤訊息

已修正 Html.ValidationMessage 方法,使其顯示第一個有用的錯誤訊息,而不只是顯示第一個錯誤。

在模型繫結期間,ModelState 字典可以從多個來源填入有關屬性的錯誤訊息,包括來自模型本身 (如果實作 IValidatableObject)、套用至屬性的驗證屬性,以及從存取屬性時擲回的例外狀況。

Html.ValidationMessage 方法顯示驗證訊息時,它會略過包含例外狀況的模型狀態專案,因為這些專案通常不適合終端使用者使用。 相反地,方法會尋找與例外狀況無關的第一個驗證訊息,並顯示該訊息。 如果找不到這類訊息,它會預設為與第一個例外狀況相關聯的泛型錯誤訊息。

已修正 @model 宣告,不會將空白文字新增至文件

在舊版中,@model 檢視頂端的宣告會將空白行新增至呈現的 HTML 輸出。 這個問題已修正,因此宣告不會引入空白文字。

已將「FileExtensions」屬性新增至檢視引擎,以支援引擎特定的檔名

檢視引擎可以使用明確的檢視路徑傳回檢視,如下列範例所示:

return View("~/views/home/index.cshtml");

第一個檢視引擎一律會嘗試呈現檢視。 根據預設,Web Form 檢視引擎是第一個檢視引擎;因為 Web Forms 引擎無法呈現 Razor 檢視,所以會發生錯誤。 檢視引擎現在具有 FileExtensions 屬性,可用來指定其支援的副檔名。 當 ASP.NET 判斷檢視引擎是否可以呈現檔案時,將會檢查這個屬性。 這是重大變更,如需詳細資料,請參閱本文件的重大變更一節。

已修正「LabelFor」協助程式發出「For」屬性的正確值

已修正 LabelFor 方法呈現符合 input 元素之 name 屬性的 for 屬性,而非識別的屬性。 根據 W3C,for 屬性應該與 input 元素的識別碼相符合。

已修正在模型繫結期間提供明確值優先順序的「RenderAction」方法

在舊版中,傳遞至 RenderAction 方法的明確值在子動作內的模型繫結期間,會忽略目前的表單值。 修正可確保明確值在模型繫結期間優先處理。

ASP.NET MVC 3 RC2 中的重大變更

  • 在舊版的 ASP.NET MVC 中,除了少數情況,每個要求都會建立動作篩選條件。 我們從不保證一定會產生相同行為,我們只是實作詳細資料,且篩選條件的合約就是將其視為沒有任何狀態。 在 ASP.NET MVC 3 中,篩選會更積極進行快取。 因此,任何不當儲存執行個體狀態的自訂動作篩選可能會中斷。
  • 例外狀況篩選的執行順序已變更為具有相同 Order 值的例外狀況篩選條件。 在 ASP.NET MVC 2 和更早版本中,在動作方法的例外狀況篩選之前,在動作方法的例外狀況篩選之前,會執行與動作方法上相同 Order 值的控制器例外狀況篩選。 這通常是在沒有指定 Order 值的情況下套用例外狀況篩選的情況。 在 ASP.NET MVC 3 中,此順序已反轉,因此最特定的例外狀況處理程式會先執行。 如同更早版本,如果明確指定 Order 屬性,則會依指定的順序執行篩選。
  • 名為 FileExtensions 的新屬性已新增至 VirtualPathProviderViewEngine 基底類別。 當 ASP.NET 依路徑查詢檢視時 (不是依名稱),只會考慮此新屬性所指定清單中副檔名的檢視。 這是登錄自訂組建提供者的應用程式的重大變更,可為 Web Form 檢視啟用自訂副檔名,而提供者會使用完整路徑而非名稱參考這些檢視。 因應措施是修改 FileExtensions 屬性的值,可包含自訂副檔名。
  • 直接實作 IControllerFactory 介面的自訂控制器處理站實作必須提供此版本中新增至介面的新增 GetControllerSessionBehavior 方法實作。 一般而言,建議您不要直接實作此介面,而是從 DefaultControllerFactory 衍生類別。

ASP.NET MVC 3 RC2 中的已知問題

  • ASP.NET MVC 3 安裝程式只能安裝 NuGet 套件管理員的初始版本。 安裝初始版本之後,可以使用 Visual Studio 擴充功能管理員來安裝及更新 NuGet。 如果您已安裝 NuGet,請移至 Visual Studio 擴充功能庫以更新至最新版本的 NuGet。
  • 在方案資料夾中建立新的 ASP.NET MVC 3 專案會導致 NullReferenceException 錯誤。 因應措施是在解決方案根目錄中建立 ASP.NET MVC 3 專案,然後將它移至方案資料夾。
  • 安裝程式可能需要比舊版 ASP.NET MVC 更久才能完成。 這是因為它會更新 Visual Studio 2010 的元件。
  • 安裝 ReSharper 時,Razor 語法的 IntelliSense 無法運作。 如果您已安裝 ReSharper,而且想要利用 ASP.NET MVC 3 RC2 中的 Razor IntelliSense 支援,請參閱 Hadi Hariri 部落格上的 Razor Intellisense 和 ReSharper,在其中討論今天一起使用的方式。
  • 以 Beta 版 ASP.NET MVC 3 建立的 CSHTML 和 VBHTML 檢視未正確設定其建置動作,因此在發佈專案時會省略這些檢視類型。 這些檔案的建置動作值應該設定為 [內容]。 ASP.NET MVC 3 RC2 會為新檔案修正此問題,但不會修正使用 Beta 版本所建立專案的既有檔案設定。[屬性] 對話方塊中建置動作功能表開啟,且已選取內容選項的螢幕擷取畫面。
  • 在安裝期間,[EULA 接受] 對話方塊會在小於預期大小的視窗中顯示授權條款。
  • 當您編輯 Razor 檢視 (cshtml 檔案) 時,Visual Studio 中的 [移至控制器] 功能表項目將無法使用,而且沒有程式碼片段。
  • 如果您在未安裝 Visual Studio 的電腦上安裝 ASP.NET MVC 3 for Visual Web Developer Express,然後稍後安裝 Visual Studio,您必須重新安裝 ASP.NET MVC 3。 ASP.NET MVC 3 安裝程式升級的 Visual Studio 會和 Visual Web Developer Express 共用元件。 如果您在沒有 Visual Web Developer Express 的電腦上安裝 ASP.NET MVC 3 for Visual Studio,然後稍後安裝 Visual Web Developer Express,則適用相同的問題。
  • 如果您已安裝 NuGet,則安裝 ASP.NET MVC 3 RC 2 時不會更新 NuGet。 若要升級 NuGet,請移至 Visual Studio 擴充功能管理員,它應該會顯示為可用的更新。 您可以從該處將 NuGet 升級至最新版本。

ASP.NET MVC 3 候選版

ASP.NET MVC 候選版於 2010 年 11 月 9 日發行。

ASP.NET MVC 3 RC 的新功能

本小節描述自 Beta 版以來,ASP.NET MVC 3 RC 版本中引進的功能。

NuGet 套件管理員

ASP.NET MVC 3 包含 NuGet 套件管理員 (先前稱為 NuPack),這是將程式庫和工具新增至 Visual Studio 專案的整合套件管理工具。 此工具會將開發人員今天採取的步驟自動化,以將程式庫放入其來源樹狀結構。

您可以從 Visual Studio 操作功能表使用 NuGet 做為命令行工具、Visual Studio 2010 內的整合式控制台視窗,以及作為一組 PowerShell Cmdlet。

如需 NuGet 的詳細資訊,請參閱 NuGet 文件

改進的 [新增專案] 對話方塊

當您建立新的專案時,[新增專案] 對話方塊現在可讓您指定檢視引擎以及 ASP.NET MVC 專案類型。

[新增專案] 對話方塊,檢視引擎功能表已開啟,並已選取 razor 的螢幕擷取畫面。

支援修改在此對話方塊中的範本和檢視引擎清單已經包含在此版本中。

預設範本如下:

空白。 包含 ASP.NET MVC 專案的最低檔案集合,包括 ASP.NET MVC 專案的預設目錄結構、包含預設 ASP.NET MVC 樣式的 Site.css 檔案,以及包含預設 JavaScript 檔案的 Scripts 目錄。

網際網路應用程式。 包含示範如何使用成員資格提供者搭配 ASP.NET MVC 的範例功能。

對話方塊中顯示的專案範本清單會指定於 Windows 登錄中。

無工作階段控制器

新的 ControllerSessionStateAttribute 藉由指定 System.Web.SessionState.SessionStateBehavior 列舉值,讓您更能控制控制器的工作階段狀態行為。

下列範例示範如何關閉控制器所有要求的工作階段狀態。

[ControllerSessionState(SessionStateBehavior.Disabled)]
public class CoolController : Controller {
    public ActionResult Index() {
        object o = Session["Key"]; // Causes an exception.

    }
}

下列範例示範如何將控制器所有要求設定成唯讀的工作階段狀態。

[ControllerSessionState(SessionStateBehavior.ReadOnly)]
public class CoolController : Controller {
    public ActionResult Index() {
    Session["Key"] = "value"; // Value is not available in
    the next request
    }
}

新增驗證屬性

CompareAttribute

新增 CompareAttribute 驗證屬性可讓您比較模型兩個不同屬性的值。 在下列範例中,ComparePassword 屬性必須符合 Password 欄位才能有效。

public class User {
    [Required]

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

RemoteAttribute

新增 RemoteAttribute 驗證屬性會利用 jQuery 驗證外掛程式的遠端驗證程式,讓用戶端驗證在伺服器上呼叫執行實際驗證邏輯的方法。

在下列範例中,UserName 屬性已套用 RemoteAttribute。 在 [編輯] 檢視中編輯此屬性時,用戶端驗證會在 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";
    }
}

根據預設,屬性套用的屬性名稱會以查詢字串參數的形式傳送至動作方法。

新增「LabelFor」和「LabelForModel」方法的多載

新增多載已加入 LabelForLabelForModel 方法,可讓您用來指定標籤文字。 以下範例會示範如何使用這些多載。

@Html.LabelFor(m => m.PropertyName,
"Label Text");
@Html.LabelForModel("Label Text");

子動作輸出快取

OutputCacheAttribute 支援使用 Html.RenderActionHtml.Action 協助程式方法呼叫的子動作輸出快取。 下列範例顯示呼叫另一個動作的檢視。

Hi there. The uncached time is:
@DateTime.Now
The cached time is: @Html.Action("GetDate")

GetDate 動作會以 OutputCacheAttribute 註記:

[OutputCache(Duration = 100,
VaryByParam = "none")]
public string GetDate() {
    return DateTime.Now.ToString();
}

執行此程式碼時,呼叫 Html.Action("GetDate") 的結果會快取 100 秒。

[新增檢視] 對話方塊改進

當您新增強型別檢視時,[新增檢視] 對話方塊現在會篩選出比舊版更不適用的類型,例如許多核心 .NET Framework 類型。 此外,清單現在會依類別名稱排序,而不是依完整類型名稱排序,這可讓您更輕鬆地尋找類型。 例如,類型名稱現在的顯示將如下列範例所示:

ClassName (namespace)

在舊版中,這會顯示為下列內容:

Namespace.ClassName

細微的要求驗證

ValidateInputAttributeExclude 屬性已不存在。 相反地,若要在模型繫結期間略過模型的特定屬性要求驗證,請使用新的 SkipRequestValidationAttribute

例如,假設動作方法可用來編輯部落格文章:

[HttpPost]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

下列範例顯示部落格文章的檢視模型。

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    public string Description {get; set;}
}

當使用者提交 Description 屬性的一些標記時,模型繫結會因為要求驗證而失敗。 若要在部落格文章 Description 的模型繫結期間停用要求驗證,請將 SkipRequpestValidationAttribute 套用至屬性,如下列範例所示:

public class BlogPostViewModel {
    public int Id {get; set;}

    public string Subject {get; set;}

    [SkipRequestValidation]

    public string Description {get; set;}
}

或者,若要關閉模型每個屬性的要求驗證,請將具有 false 值的 ValidateInputAttribute 套用至 action 方法:

[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(BlogPostViewModel post) {
    // Save the post in the database
}

ASP.NET MVC 3 RC 中的重大變更

  • 例外狀況篩選的執行順序已變更為具有相同 Order 值的例外狀況篩選條件。 在 ASP.NET MVC 2 和更早版本中,在動作方法的例外狀況篩選之前,在動作方法的例外狀況篩選之前,會執行與動作方法上相同 Order 的控制器例外狀況篩選。 這通常是在沒有指定 Order 值的情況下套用例外狀況篩選的情況。 在 ASP.NET MVC 3 中,此順序已反轉,因此最特定的例外狀況處理程式會先執行。 如同更早版本,如果明確指定 Order 屬性,則會依指定的順序執行篩選。
  • 已將名為 FileExtensions 的新屬性新增至 VirtualPathProviderViewEngine 基底類別。 當依路徑查詢檢視時 (且不是依名稱),只會考慮此新屬性所指定清單中副檔名的檢視。 對於登錄自訂組建提供者以啟用 Web 表單檢視的自訂副檔名,並使用完整路徑而非名稱來參考這些檢視的人來說,這是一項重大變更。 因應措施是修改 FileExtensions 屬性的值,可包含自訂副檔名。

ASP.NET MVC 3 RC 中的已知問題

  • 安裝程式可能需要比舊版 ASP.NET MVC 更久才能完成,因為它會更新 Visual Studio 2010 的元件。
  • 選取強型別檢視建構唯寫屬性時發生 [新增檢視] 建構。 Scaffolding 應該一律忽略這些情況。 [新增檢視] 對話方塊也會在產生 [編輯] 或 [建立] 檢視時建構唯讀屬性。 唯讀屬性應該只在 [顯示] 和 [清單] 檢視下進行建構。
  • ASP.NET MVC 3 與 Async CTP 一起安裝時,偵錯無法運作。 ASP.NET MVC 3 無法與 Async CTP 並存安裝。 解除安裝 Async CTP 並修復偵錯。 如需詳細資訊,請閱讀此部落格文章,了解解除安裝所有 ASP.NET MVC 3 RC 部分。
  • 安裝 Resharper 時,Razor Intellisense 無法運作。 如果您已安裝 ReSharper,而且想要利用 ASP.NET MVC 3 RC 中的 Razor Intellisense 支援,請閱讀 JetBrains 的這篇部落格文章,討論今天一起使用的方式。
  • 以 ASP.NET MVC 3 Beta 建立的 CSHTML 和 VBHTML 檢視未正確建置動作,無法將其從發佈中略過。 這些檔案的建置動作應該設定為 [內容]。 ASP.NET MVC 3 RC 會為新檔案修正此問題,但不會修正使用 Beta 版本所建立專案的既有檔案設定。
  • 安裝程式可能需要比舊版 ASP.NET MVC 更久才能完成,因為它會更新 Visual Studio 2010 的元件。
  • 選取 [編輯] 強型別檢視建構唯讀屬性時發生 [新增檢視] 建構。 同樣地,唯寫屬性可對 [顯示] 檢視進行建構。
  • 在安裝期間,[EULA 接受] 對話方塊會在小於預期大小的視窗中顯示授權條款。
  • 安裝 Visual Studio Async CTP 會導致與隨附於 ASP.NET MVC 3 工具安裝的 Razor 版本發生衝突。 請確定您不會嘗試在同一部電腦上安裝 Visual Studio Async CTP 和 Razor 版本。
  • 當您編輯 Razor 檢視 (cshtml 檔案) 時,Visual Studio 中的 [移至控制器] 功能表項目將無法使用,而且沒有程式碼片段。

ASP.NET MVC 3 Beta

ASP.NET MVC 3 Beta 於 2010 年 10 月 6 日發行。 下列注意事項專屬於 Beta 版本,並受限於上述 ASP.NET MVC 3 候選版一節中所參考的任何更新或變更。

ASP.NET MVC 3 Beta 的新功能

本節描述 ASP.NET MVC 3 Beta 版本中引進的功能。

NuGet 套件管理員

ASP.NET MVC 3 包含 NuGet 套件管理員,這是將程式庫和工具新增至 Visual Studio 專案的整合套件管理工具。 在大多數情況下,它會將開發人員今天採取的步驟自動化,以將程式庫放入其來源樹狀結構。

您可以從 Visual Studio 操作功能表使用 NuGet 做為命令行工具、Visual Studio 2010 內的整合式控制台視窗,以及作為一組 PowerShell Cmdlet。

如需 NuGet 的詳細資訊,請參閱 NuGet 文件

改進的 [新增專案] 對話方塊

當您建立新的專案時,[新增專案] 對話方塊現在可讓您指定檢視引擎以及 ASP.NET MVC 專案類型。

[新增專案] 對話方塊,已從檢視引擎功能表中選取 Razor 的螢幕擷取畫面。

支援修改在此對話方塊中的範本和檢視引擎清單未包含在此版本中。

預設範本如下:

空白。 包含 ASP.NET MVC 專案的最低檔案集合,包括 ASP.NET MVC 專案的預設目錄結構、包含預設 ASP.NET MVC 樣式的小型 Site.css 檔案,以及包含預設 JavaScript 檔案的 Scripts 目錄。

網際網路應用程式。 包含示範如何使用成員資格提供者搭配 ASP.NET MVC 的範例功能。

在 Razor 檢視中指定強型別模型的簡易方式

使用 CSHTML 檢視的新 @model 指示詞和 @ModelType VBHTML 檢視的指示詞,簡化了為強型別 Razor 檢視指定模型類型的方式。 在舊版的 ASP.NET MVC 中,您可以透過下列方式指定 Razor 檢視的強型別模型:

@inherits System.Web.Mvc.WebViewPage

在此版本中,您可以使用下列語法:

@model MyModelNamespace.MyModelType

支援新的 ASP.NET 網頁協助程式方法

新的 ASP.NET 網頁技術包含一組協助程式方法,可用於將常用功能新增至檢視和控制器。 ASP.NET MVC 3 支援在控制器和檢視中使用這些協助程式方法 (視情況)。 這些方法包含在 System.Web.Helpers 組件中。 下表列出幾個 ASP.NET 網頁協助程式方法。

小幫手 說明
圖表 在檢視中呈現圖表。 包含 Chart.ToWebImage、Chart.Save 和 Chart.Write 等方法。
Crypto 使用雜湊演算法來建立適當加料和雜湊的密碼。
WebGrid 將物件的集合呈現為方格 (通常是來自資料庫的資料)。 支援分頁與排序。
WebImage 呈現影像。
WebMail 傳送電子郵件訊息。

列出協助程式和基本語法的快速參考主題,可在下列 URL 的 ASP.NET Razor 語法文件中取得:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-api-reference

支援其他相依性插入

以 ASP.NET MVC 3 Preview 1 版本為基礎,目前版本包含新增兩個新服務和四項現有服務的支援,以及改善相依性解析和 Common Service 定位器的支援。

適用於微調控制器具現化的新增 IControllerActivator 介面

新增 IControllerActivator 介面可讓您更精細地控制透過相依性插入具現化控制器的方式。 下列範例展示此介面:

namespace System.Web.Mvc {
    using System.Web.Routing;

    public interface IControllerActivator {
        IController Create(RequestContext requestContext, Type controllerType);
    }
}

這與控制器處理站的角色形成對比。 控制器處理站是 IControllerFactory 介面的實作,負責尋找控制器類型,以及具現化該控制器類型的執行個體。

控制器啟動器只負責具現化控制器類型的執行個體。 它們不會執行控制器類型查詢。 找到適當的控制器類型之後,控制器處理站應該委派給 IControllerActivator 執行個體,以處理控制器的實際具現化。

DefaultControllerFactory 類別具有接受 IControllerFactory 執行個體的新建構函式。 這可讓您套用相依性插入來管理建立控制器的這個層面,而不需要覆寫預設控制器類型查詢行為。

IServiceLocator 介面取代為 IDependencyResolver

根據社群意見反應,ASP.NET MVC 3 Beta 版本已用精簡的 IDependencyResolver 介面取代 IServiceLocator 介面,提供滿足 ASP.NET MVC 需求的特有 IDependencyResolver 介面。 以下範例顯示新介面:

namespace System.Web.Mvc {
    using System.Collections.Generic;

    public interface IDependencyResolver {
        object GetService(Type serviceType);
        IEnumerable<object> GetServices(Type serviceType);
    }
}

在這項變更中,ServiceLocator 類別也會取代為 DependencyResolver 類別。 相依性解析程式的登錄與舊版的 ASP.NET MVC 相似:

DependencyResolver.SetResolver(myResolver);

此介面的實作應該只委派給基礎相依性插入容器,以提供所要求類型的已登錄服務。

當要求類型沒有已登錄的服務時,ASP.NET MVC 預期此介面的實作會從 GetService 傳回 Null,並從 GetServices 傳回空集合。

新的 DependencyResolver 類別可讓您登錄實作新 IDependencyResolver 介面或 Common Service Locator 介面 (IServiceLocator) 的類別。 如需 Common Service Locator 的詳細資訊,請參閱 GitHub 上的 CommonServiceLocator

適用於精細檢視頁面具現化的新 IViewActivator 介面

新增 IViewPageActivator 介面可讓您更精細地控制透過相依性插入具現化檢視頁面的方式。 這同時適用於 WebFormView 執行個體和 RazorView 執行個體。 以下範例顯示新介面:

namespace System.Web.Mvc {
    public interface IViewPageActivator {
        object Create(ControllerContext controllerContext, Type type);
    }
}

這些類別現在接受 IViewPageActivator 建構函式引數,可讓您使用相依性插入來控制 ViewPage、ViewUserControl 和 WebViewPage 類型的具現化方式。

現有服務的新相依性解析程序支援

新版本包含下列服務的相依性解析支援:

  • 模型驗證提供者。 實作 ModelValidatorProvider 的類別可以在相依性解析程式中進行登錄,而且系統會使用它們來支援用戶端和伺服器端驗證。
  • 模型中繼資料提供者。 實作 ModelMetadataProvider 的單一類別可以在相依性解析程式中進行登錄,而且系統會使用它來提供製作範本和驗證系統的中繼資料。
  • 值提供者。 實作 ValueProviderFactory 的類別可以在相依性解析程式中進行登錄,而且系統會使用它們來建立可供控制器和模型繫結期間取用的值提供者。
  • 模型繫結器。 實作 IModelBinderProvider 的類別可以在相依性解析程式中進行登錄,而且系統會使用它們來建立模型繫結系統所使用的模型繫結器。

jQuery 低調 Ajax 的新支援

ASP.NET MVC 包括 Ajax 協助程式方法,例如:

  • Ajax.ActionLink
  • Ajax.RouteLink
  • Ajax.BeginForm
  • Ajax.BeginRouteForm

這些方法會使用 JavaScript 在伺服器上叫用動作方法,而不是使用完整回傳。 這項功能已更新,以低調方式利用 jQuery。 這些協助程式方法不是侵入性地發出內嵌用戶端指令碼,而是使用 data-ajax 前置詞發出 HTML5 屬性,將行為與標記分開。 然後,藉由參考適當的 JavaScript 檔案,將行為套用至標記。 務必參考下列 JavaScript 檔案:

  • jquery-1.4.1.js
  • jquery.unobtrusive.ajax.js

此功能預設會在 ASP.NET MVC 3 新專案範本的 Web.config 檔案中啟用,且預設現有專案將會停用。 如需詳細資訊,請參閱本文件後面已新增全應用程式旗標進行用戶端驗證和低調 JavaScript

全新支援低調 jQuery 驗證

根據預設,ASP.NET MVC 3 Beta 會以低調方式使用 jQuery 驗證,並執行用戶端驗證。 若要啟用低調客戶端驗證,請從檢視內進行如下呼叫:

Html.EnableClientValidation();

這時 ViewContext.UnobtrusiveJavaScriptEnabled 屬性必須設定為 true,您才可以進行下列呼叫:

Html.EnableUnobtrusiveJavaScript();

另請務必參考下列 JavaScript 檔案。

  • jquery-1.4.1.js
  • jquery.validate.js
  • jquery.validate.unobtrusive.js

此功能預設會在 ASP.NET MVC 3 新專案範本的 Web.config 檔案中啟用,且預設現有專案將會停用。 如需詳細資訊,請參閱本文件後面新增全應用程式旗標進行用戶端驗證和低調 JavaScript

用戶端驗證和低調 JavaScript 的新全應用程式旗標

您可以使用 HtmlHelper 類別的靜態成員全域啟用或停用此用戶端驗證和低調 JavaScript,如下列範例所示:

HtmlHelper.ClientValidationEnabled = true;
HtmlHelper.UnobtrusiveJavaScriptEnabled = true;

預設專案範本會會啟用低調 JavaScript。 您也可以使用下列設定,在應用程式的根 Web.config 檔案中啟用或停用這些功能:

<configuration>
        <appSettings>
            <add key="ClientValidationEnabled" value="true"/>
            <add key="UnobtrusiveJavaScriptEnabled" value="true"/>
        </appSettings>
    </configuration>

因為您可以接受這些功能預設啟用,因此會引進新的多載至 HtmlHelper 類別,讓您覆寫預設設定,如下列範例所示:

public void EnableClientValidation();
public void EnableClientValidation(bool enabled);
public void EnableUnobtrusiveJavaScript();
public void EnableUnobtrusiveJavaScript(bool enabled);

為了保持回溯相容性,這兩項功能會根據預設停用。

全新支援檢視執行之前執行的程式碼

您現在可以將名為 _viewstart.cshtml (或 _viewstart.vbhtml) 的檔案放在 Views 目錄中,並將程式碼新增至該目錄中的多個檢視與其子目錄中共用的程式碼。 例如,您可以將下列程式碼放入 ~/Views 資料夾中的 _viewstart.cshtml 頁面:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

這會以遞歸方式設定 Views 資料夾及其所有子資料夾內每個檢視的配置頁面。 呈現檢視時,_viewstart.cshtml 檔案中的程式碼會在檢視程式碼執行之前完成執行。 _viewstart.cshtml 程式碼會套用至該資料夾中的每個檢視。

根據預設,_viewstart.cshtml 檔案中的程式碼也適用於任何子資料夾中的檢視。 不過,個別子資料夾可以有自己的 _viewstart.cshtml 檔案版本;在此情況下,本機版本會優先使用。 例如,若要執行 HomeController 所有檢視通用的程式代碼,請將 _viewstart.cshtml 檔案放在 ~/Views/Home 資料夾中。

全新支援 VBHTML Razor 語法

先前 ASP.NET MVC 預覽版包含使用以 C# 為基礎的 Razor 語法檢視支援。 這些檢視會使用 .cshtml 副檔名。 在持續支援 Razor 的工作中,ASP.NET MVC 3 Beta 引進了 Visual Basic 中 Razor 語法的支援,其使用 .vbhtml 副檔名。

如需在 VBHTML 頁面中使用 Visual Basic 語法的簡介,請參閱下列 URL 的教學課程:

https://www.asp.net/webmatrix/tutorials/asp-net-web-pages-visual-basic

更細微控制 ValidateInputAttribute

ASP.NET MVC 一律包含 ValidateInputAttribute 類別,它會叫用核心 ASP.NET 要求驗證基礎結構,以確保傳入要求不包含潛在的惡意輸入。 根據預設,會啟用輸入驗證。 您可以使用 ValidateInputAttribute 屬性來停用要求驗證,如下列範例所示:

[ValidateInput(false)]
public ActionResult SomeAction() {
    return View();
}

不過,許多 Web 應用程式都有需要允許 HTML 的個別表單域,而其餘欄位則不應該。 ValidateInputAttribute 類別現在可讓您指定不應包含在要求驗證中的欄位清單。

例如,如果您正在開發部落格引擎,您可能想要在 [本文] 和 [摘要] 欄位中允許標記。 這些欄位可能由兩個輸入元素表示,每個輸入元素都有對應至屬性名稱的名稱屬性 (「Body」和「Summary」)。 若要只停用這些欄位的要求驗證,請在 ValidateInput 類別的 Exclude 屬性中指定名稱 (逗號分隔),如下列範例所示:

[ValidateInput(true, Exclude="Body, Summary")]
public ActionResult About() {
    return View();
}

協助程式針對使用匿名物件指定的 HTML 屬性名稱,將底線轉換成連字號

Helper 方法可讓您使用匿名物件來指定屬性名稱/值組,如下列範例所示:

Html.TextBox("Name", "Value", new {title = "Title"})

此方法不會讓您在屬性名稱中使用連字號,因為連字號不能用於 ASP.NET 中的屬性名稱。 不過,連字號對於自訂 HTML5 屬性很重要;例如,HTML5 使用「data-」前置詞。

同時,底線不能用於 HTML 中的屬性名稱,但在屬性名稱內有效。 因此,如果您使用匿名物件指定屬性,而且如果屬性名稱包含底線,則協助程式方法會將底線轉換成連字號。 例如,下列協助程式語法會使用底線:

Html.TextBox("Name", "Value", new {data_required = "true"})

上述範例會在協助程式執行時呈現下列標記:

<input data-required="true" id="Name" name="Name"
       type="textbox" value="Value" />

錯誤修正

EditorFor 和 DisplayFor 範本協助程式的預設物件範本現在支援 DisplayAttribute.Order 屬性中指定的排序。 (在舊版中,未使用 [訂單] 設定。)

用戶端驗證現在支援已套用驗證屬性的覆寫屬性驗證。

JsonValueProviderFactory 現在會預設完成登錄。

重大變更

例外狀況篩選的執行順序已變更為具有相同 Order 值的例外狀況篩選條件。 在 ASP.NET MVC 2 和更早版本中,在動作方法的例外狀況篩選之前,在動作方法的例外狀況篩選之前,會執行與動作方法上相同 Order 的控制器例外狀況篩選。 這通常是在沒有指定 Order 值的情況下套用例外狀況篩選的情況。 在 ASP.NET MVC 3 中,此順序已反轉,因此最特定的例外狀況處理程式會先執行。 如同更早版本,如果明確指定 Order 屬性,則會依指定的順序執行篩選。

已知問題

在安裝期間,[EULA 接受] 對話方塊會在小於預期大小的視窗中顯示授權條款。

Razor 檢視不支援 IntelliSense,也不會醒目提示語法。 預計在稍後 Visual Studio 版本中將會包含 Razor 語法支援。

當您編輯 Razor 檢視 (CSHTML 檔案) 時,Visual Studio 中的 [移至控制器] 功能表項目將無法使用,而且沒有程式碼片段。

使用 @model 語法指定強型別 CSHTML 檢視時,無法辨識類型的語言特定捷徑。 例如,@model int 將無法運作,但 @model Int32 將會運作。 此錯誤的因應措施是在指定模型類型時,使用實際的類型名稱。

使用 @model 語法指定強型別 CSHTML 檢視時 (或 @ModelType 指定強型別 VBHTML 檢視時),不支援可為 Null 的類型和陣列宣告。 例如,@model int? 不受支援。 請改用 @model Nullable<Int32>。 語法 @model string[] 也不再支援;請改用 @model IList<string>

當您將 ASP.NET MVC 2 專案升級至 ASP.NET MVC 3 時,請務必將下列內容新增至 Web.config 檔案的 appSettings 區段:

<appSettings>
  <add key="enableSimpleMembership" value="false" />
</appSettings>

導致表單驗證的已知問題一律會將未經驗證的使用者重新導向至 ~/Account/Login,忽略 Web.config 中使用的表單驗證設定。因應措施是新增下列應用程式設定。

<add key="autoFormsAuthentication" value="false" />

免責聲明

© 2011 Microsoft Corporation. 著作權所有,並保留一切權利。 本文件提供「as-is」。本文件中的資訊以及表達的觀點 (包括 URL 及其他網路網站參考) 如有變更,恕不另行通知。 您必須承擔使用本文件的風險。

本文件不提供您任何 Microsoft 產品之任何智慧財產權的任何法律權利。 您可以複製和使用本文件,以參考為目的供內部使用。