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.)

您可在 ASP.NET 網站上找到 ASP.NET MVC 3 每個預先發行版本之版本資訊的完整集合,其 URL 如下所示:

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

安裝注意事項

若要使用 Web Platform Installer (Web PI) 安裝 ASP.NET MVC 3 RTM,請流覽下列頁面:

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

或者,您可以從下列頁面下載適用于 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 專案方案根目錄中的 packages 資料夾複製到方案的根目錄中,該根目錄位於方案的 .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. 在 方案總管中,刪除指向 2) DLL 的System.Web.Mvc (參考,然後新增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 Tools Update 中的變更

本章節說明自 ASP.NET MVC 3 RTM 版本發行以來,在 ASP.NET MVC 3 Tools Update 版本中所做的變更。

[加入控制器] 對話方塊現在可以使用檢視和資料存取程式碼 Scaffold 控制器

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

若要在 ASP.NET MVC 3 中啟動 [新增控制器] 對話方塊,請以滑鼠右鍵按一下方案總管中的Controllers資料夾,按一下 [新增],然後按一下 [控制器]。 此對話方塊功能已增強,可提供額外的 Scaffolding 選項。

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

根據預設,有三個 Scaffolding 範本可供使用。

空白控制器

此範本會產生空白的控制器檔案。 此範本相當於不要檢查在舊版 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 程式碼優先」慣例定義下列模型類別:

    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 程式碼優先」,則可以選擇任何模型類別。

  • 如果您使用的是「Entity Framework 資料庫優先」或「Entity Framework 模型優先」,請務必選擇您概念模型中定義的實體類別。

針對 [資料內容] 類別,您可以進行下列選擇:

  • 如果您想要使用 Code First 且沒有現有的資料內容類別別,請選擇 [新增資料內容] ** 。 系統會為您產生資料內容類別。
  • 如果您要使用「程式碼優先」且具有資料內容類別,則在此選擇此類別。 此類別會進行更新以保存您選取的模型類別。
  • 如果您使用的是「資料庫優先」或「模型優先」,則在此選擇您的物件內容類別。

針對 [檢視],請選擇您要使用的檢視引擎,或選擇 [無],如果您不要 Scaffold 任何檢視。

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

[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 的瀏覽器支援這些功能。 此程式庫以預先安裝的 NuGet 套件形式內含在 ASP.NET MVC 3 專案範本中。 如需 Modernizr 的詳細資訊,請參閱 http://www.modernizr.com/

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

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

  • jQuery 1.5.1
  • jQuery Validation 1.8
  • jQuery UI 1.8.11

這些程式庫皆以預先安裝的 NuGet 套件形式內含在專案範本中。

專案範本現在包含 ADO.NET Entity Framework 4.1,其以預先安裝的 NuGet 套件形式內含在範本中

ADO.NET Entity Framework 4.1 包含「程式碼優先」功能。 「程式碼優先」是 ADO.NET Entity Framework 的新開發模式,提供另一種方法來替代現有「資料庫優先」和「模型優先」模式。

「程式碼優先」的重點是使用以 Visual Basic 或 C# 撰寫的 POCO 類別 (「一般簡單的 CLR 物件」) 定義您的模型。 這些類別接著可以對應至現有資料庫,或用來產生資料庫結構描述。 您可以使用 DataAnnotations 屬性或使用 Fluent API 來提供其他設定。

下列 URL 的 ASP.NET 網站上提供使用 Code Firstwith ASP.NET MVC 的檔:

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 更新為最新版本也需要更新 <script> 參考 jQuery 檔案的標籤,才能使用新的檔案名。 其他內含的指令碼程式庫並沒有在指令碼名稱中加入版本編號,所以較易於更新為最新版本。

ASP.NET MVC 3 中的已知問題

  • 在某些情況下,安裝可能會失敗,並出現錯誤訊息「安裝失敗,錯誤碼 (0x80070643) 」。 如需如何解決此問題的相關資訊,請參閱 KnowledgeBase 文章2531566
  • 用於加入控制器的 scaffolding 不會 Scaffold 利用 Entity Framework 實體繼承支援的實體。 例如,假設有一個由 Student類別繼承的基底Person類別,Scaffolding 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 檢視的任何程式碼片段。aspxselect a code snippet for ASP.NET MVC will show snippets for
  • 如果您在未安裝 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 類別的快取,以提升效能。 不過,此實作回報了某些 Bug,因此變更已還原並移至 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 版本中所做的新功能和 Bug 修正) (變更。

專案範本已變更為包含 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

用於 Scaffolding 檢視的 T4 範本現在會產生範本協助程式方法的呼叫,例如 EditorFor ,而不是 TextBoxFor之類的協助程式。 當 [加入檢視] 對話方塊產生檢視時,這項變更可改善模型上資料批註屬性上的中繼資料支援。

新增檢視 Scaffolding 也包含根據慣例,改善模型上主要金鑰資訊的偵測和使用方式。 例如,[新增檢視] 對話方塊會使用這項資訊,以確保主鍵值不會建構為可編輯的表單欄位。

預設的 [編輯] 和 [建立範本] 包含用戶端驗證所需的 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」 屬性新增至檢視引擎,以支援Engine-Specific檔案名

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

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

第一個檢視引擎一律會嘗試轉譯檢視。 根據預設,Web Form檢視引擎是第一個檢視引擎;因為Web Form引擎無法轉譯 Razor 檢視,所以會發生錯誤。 檢視引擎現在有 FileExtensions 屬性,可用來指定其支援的副檔名。 當 ASP.NET 判斷檢視引擎是否可以轉譯檔案時,就會檢查這個屬性。 This is a breaking change and more details are included in the Breaking Changes section of this document.

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

已修正LabelFor方法轉譯符合輸入元素名稱屬性而非其識別碼之屬性的 Bug。 根據 W3C, for 屬性應該符合 輸入 專案的識別碼。

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

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

ASP.NET MVC 3 RC2 的重大變更

  • 在舊版的 ASP.NET MVC 中,每個要求都會建立動作篩選,但在某些情況下除外。 此行為絕不是保證的行為,但只是實作詳細資料,而篩選準則的合約則是將其視為無狀態。 在 ASP.NET MVC 3 中,會更積極快取篩選。 因此,任何不正確地儲存實例狀態的自訂動作篩選可能會中斷。
  • 例外狀況篩選準則的執行順序已針對具有相同 Order 值的例外 狀況 篩選變更。 在 ASP.NET MVC 2 和更早版本中,在動作方法的例外狀況篩選之前,在動作方法的例外狀況篩選之前,控制站上的例外狀況篩選與動作方法上的 例外 狀況篩選相同。 這通常是在沒有指定 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 版 MVC 3 建立 ASP.NET 的 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 操作功能表,以及一組 PowerShell Cmdlet,使用 NuGet 作為命令列工具,作為 Visual Studio 2010 內的整合式主控台視窗。

如需 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.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 屬性的一些標記時,模型系結會因為要求驗證而失敗。 若要在部落格文章描述的模型系結期間停用要求驗證,請將 SkipRequpestValidationAttribute 套用至 屬性,如下列範例所示:

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

    public string Subject {get; set;}

    [SkipRequestValidation]

    public string Description {get; set;}
}

或者,若要關閉模型每個屬性的要求驗證,請將 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 的元件。
  • 選取純型別檢視 Scaffolds 寫入屬性時,[新增檢視] Scaffolding。 Scaffolding 應該一律忽略這些。 [新增檢視] 對話方塊也會在產生「編輯」或「建立」檢視時建立唯讀屬性。 唯讀屬性應該只針對 [顯示] 和 [清單] 檢視進行 Scaffold。
  • 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 的此部落格文章 ,其中討論目前一起使用的方式。
  • 使用 Beta of ASP.NET MVC 3 建立的 CSHTML 和 VBHTML 檢視,不會正確執行其建置動作,而無法將其從發佈中省略。 這些檔案的 建置動作 應設定為 「內容」。 ASP.NET MVC 3 RC 會針對新檔案修正此問題,但不會修正使用 Beta 建立之專案之現有檔案的設定。
  • 安裝程式可能需要比舊版的 ASP.NET MVC 更久才能完成,因為它會更新 Visual Studio 2010 的元件。
  • 選取 「編輯」強型別檢視時,新增檢視 Scaffolds 唯讀屬性。 同樣地,唯讀屬性會針對「顯示」檢視進行 Scaffold。
  • 在安裝期間,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 專案的整合式套件管理工具。 在大部分情況下,它會自動化開發人員今天採取的步驟,以將程式庫放入其來源樹狀結構。

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

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

改善的新專案對話方塊

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

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

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

預設範本如下:

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

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

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

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

@inherits System.Web.Mvc.WebViewPage

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

@model MyModelNamespace.MyModelType

支援新的 ASP.NET Web Pages協助程式方法

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

幫手 描述
圖表 轉譯檢視內的圖表。 包含 Chart.ToWebImage、Chart.Save 和 Chart.Write 等方法。
加密 使用雜湊演算法來建立正確 Salt 和雜湊的密碼。
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 Locator 的支援。

Fine-Grained控制器具現化的新 IControllerActivator 介面

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

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

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

將此與控制器處理站的角色對比。 控制器處理站是 IControllerFactory 介面的實作,負責尋找控制器類型,以及具現化該控制器類型的實例。

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

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

以 IDependencyResolver 取代的 IServiceLocator 介面

根據社群意見反應,ASP.NET MVC 3 Beta 版本已將 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 定位器的詳細資訊,請參閱 GitHub 上的 CommonServiceLocator

Fine-Grained檢視頁面具現化的新 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 的類別可以在相依性解析程式中註冊,而且系統會使用這些類別來建立模型系結器,而模型系結系統會使用這些類別。

Unobtrusive 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 的應用程式範圍旗 標。

Unobtrusive 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 的新Application-Wide旗標

您可以使用 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 屬性名稱,將底線轉換為連字號

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

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 屬性中指定的排序。 (在舊版中,未使用 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 會正常運作。 這個 Bug 的因應措施是當您指定模型類型時,使用實際類型名稱。

使用 @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. 著作權所有,並保留一切權利。 本檔是「依原樣」提供。這份檔中所表示的資訊和檢視,包括 URL 和其他網際網路網站參考,可能會變更而不需通知。 貴用戶須自行承擔使用風險。

本文件不為您提供對任何 Microsoft 產品中的任何智慧財產的法定權利。 您可以複製本文件供內部參照之用。