訓練
學習路徑
Implement finance and operations apps - Training
Plan and design your project methodology to successfully implement finance and operations apps with FastTrack services, data management and more.
ASP.NET MVC 3 候選版 2 (2010 年 12 月 10 日)
本文件描述 Visual Studio 2010 的 ASP.NET MVC 3 RTM 版本。 ASP.NET MVC 是開發使用 Model-View-Controller (MVC) 模式之 Web 應用程式的架構。 ASP.NET MVC 3 安裝程式包含下列元件:
您可以在下列 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 的教學課程和其他資訊,網址如下:
這是完全支援的版本。 如需獲得技術支援的相關資訊,請造訪 Microsoft 支援網站。
您也可以在 ASP.NET MVC 論壇張貼有關此版本的問題,其中 ASP.NET 社群的成員經常能夠提供非正式的支援:
https://forums.asp.net/1146.aspx
ASP.NET MVC 3 可以與同一部電腦上的 ASP.NET MVC 2 並存安裝,這可讓您彈性地選擇何時將 ASP.NET MVC 2 應用程式升級至 ASP.NET MVC 3。
若要手動將現有的 ASP.NET MVC 2 應用程式升級至第 3 版,請執行下列動作:
在電腦上建立新的空白 ASP.NET MVC 3 專案。 此專案將包含升級所需的一些檔案。
將下列檔案從 ASP.NET MVC 3 專案複製到 ASP.NET MVC 2 專案的對應位置。 您必須更新 jQuery 程式庫的任何參考,以納入考慮新檔名 (jQuery-1.5.1.js):
將空白 ASP.NET MVC 3 專案方案根目錄中的套件資料夾複製到方案的根目錄中,其位於解決方案 .sln 檔案所在的目錄中。
如果您的 ASP.NET MVC 2 專案包含任何區域,請將 /Views/Web.config 檔案複製到每個區域的 Views 資料夾。
在 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
在 [方案總管] 中,刪除 System.Web.Mvc 參考 (從第 2 版指向 DLL),然後新增 System.Web.Mvc (v3.0.0.0) 的參考。
新增參考至 System.Web.WebPages.dll 和 System.Web.Helpers.dll。 這些組件位於下列資料夾中:
在 [方案總管] 中,以滑鼠右鍵按一下專案名稱,然後選取 [卸載專案]。 然後再次以滑鼠右鍵按一下專案名稱,並選取編輯 ProjectName.csproj。
找出 ProjectTypeGuids 元素,並將 {F85E285D-A4E0-4152-9332-AB1D724D3325} 取代為 {E53F8FEA-EAE0-44A6-8774-FFD645390401}。
儲存變更,以滑鼠右鍵按一下專案,然後選擇 [重新載入專案]。
在應用程式的根 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" />
如果專案參考使用 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 RTM 版本以來,ASP.NET MVC 3 工具更新版本中所做的變更。
Scaffolding 是快速為您的應用程式產生控制器和檢視的方式。 產生程式碼之後,可以供您進行編輯以符合專案的需求。
若要在 ASP.NET MVC 3 中啟動新增控制器對話方塊,請以滑鼠右鍵按一下方案總管中的 Controllers 資料夾,按一下新增,然後按一下控制器。 已增強對話方塊,並提供其他建構選項。
預設有三個建構範本可供使用。
此範本會產生空白控制器檔案。 此範本作用等同於不會檢查在舊版 ASP.NET MVC 中新增用於建立、編輯、詳細資料、刪除案例的動作。 如果您選擇此選項,則沒有其他選項可供使用。
此範本會產生控制器檔案,其中包含所有必要的動作方法,但方法中沒有任何實作程式碼。 此範本作用等同於檢查在舊版 ASP.NET MVC 中新增用於建立、編輯、詳細資料、刪除案例的動作。 如果您選擇此選項,則沒有其他選項可供使用。
此範本可讓您快速建立可執行的資料輸入使用者介面。 它會產生可處理一系列常見需求和情境的程式碼,例如:
資料存取。 產生的程式碼會讀取和寫入資料庫中的實體。 如果您選擇現有的資料內容類別,或是讓範本產生新的 DbContext 類別,它就會使用 Entity Framework Code First 方法。 如果您選擇現有的 ObjectContext 類別,則它也適用於 Entity Framework Database First 或 Model First 方法。
驗證。 產生的程式碼會使用 ASP.NET MVC 模型繫結和中繼資料功能,以便根據模型類別上宣告的規則來驗證表單提交。 這包括內建的驗證規則,例如 Required 和 StringLength 屬性,以及自訂驗證規則。
一對多關聯。 如果您在模型類別之間定義一對多外鍵關聯性,產生的程式碼會產生下拉式清單來選取相關實體。 例如,您可以定義下列模型類別,以遵循 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類別時,您可以進行下列選擇:
如果要執行 [檢視],則選擇您想要使用的檢視引擎,或是在不想要建構任何檢視時選擇 [無]。
您可以選取 [進階選項],以指定所產生檢視的進一步選項。 例如,您可以選擇要使用的版面配置或主版頁面。
您用來建立新 ASP.NET MVC 3 專案的對話方塊包含多項改進功能,如下所示。
[專案範本] 清單包含新的內部網路應用程式範本。 此範本包含使用 Windows 驗證建置 Web 應用程式的設定,而不是使用表單驗證。 因為內部網路應用程式需要一些無法封裝在專案範本中的 IIS 設定,因此範本會包含讀我檔案,其中包含如何讓專案範本在 IIS 中運作的指示。 MSDN 網站上的新增內部網路應用程式範本檔位於下列 URL:
https://msdn.microsoft.com/library/gg703322(VS.98).aspx
[新增專案] 對話方塊現在包含一個選項,可將 HTML5 特定功能新增至專案範本。 選取選項會導致產生包含新 HTML5 <header>
、<footer>
和 <navigation>
元素的檢視。
請注意,舊版瀏覽器不支援 HTML5 特定的標記。 為了解決這項限制,HTML5 專案範本包含 Modernizr 程式庫的參考。 (請參閱下一節)。
Modernizr 是 JavaScript 程式庫,可在尚未支援這些功能的瀏覽器中支援 CSS 3 和 HTML5。 此程式庫隨 ASP.NET MVC 3 專案範本預安裝的 NuGet 套件提供。 如需 Modernizr 的詳細資訊,請參閱 http://www.modernizr.com/。
專案範本現在包含下列版本的 jQuery 指令碼:
這些程式庫已隨預安裝的 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
當您建立新的 ASP.NET MVC 3 專案時,專案會包含先前所述的 JavaScript 檔案 (例如 Modernizr 程式庫),方法是使用 NuGet 安裝它們,而不是直接將指令碼新增至專案範本內容中的指令碼資料夾。 這可讓您在發行新版本的指令碼時使用 NuGet 將指令碼更新為最新版本。
例如,假設新增 jQuery 版本的頻率,則包括在專案範本中的 jQuery 版本將會在某個時間點過期。 不過,由於 jQuery 已隨已安裝的 NuGet 套件提供,因此當有較新版本的 jQuery 可用時,您會在 [NuGet] 對話方塊中收到通知。
因為 jQuery 會在檔名中包含版本號碼,因此將 jQuery 更新為最新版本時也需要更新參考 jQuery 檔案的 <script>
的標記,才能使用新的檔名。 其他包含的指令碼程式庫不會在指令碼名稱中包含版本號碼,因此可以更輕鬆地更新為最新版本。
本小節描述自 RC2 版本以來,ASP.NET MVC 3 RTM 版本中所做的變更和錯誤修正。
Visual Studio 的 ASP.NET MVC 專案範本已更新為包含最新版的 jQuery UI 程式庫。 範本也包含 jQuery UI 所需的最小資源檔集合,例如相關聯的 CSS 和影像檔。
ASP.NET MVC 3 的 RC2 版本引進了 CachedDataAnnotationsMetadataProvider 類別,提供現有 DataAnnotationsModelMetadataProvider 類別的快取來改善效能。 不過,此實作報告了一些錯誤,因此變更已還原並移至 MVC Futures 專案,請前往 ASP.NET WebStack 下載。
在 ASP.NET MVC 3 的發行前版本中,當您將包含空白文字的 Razor 運算式部分貼到 Razor 檔案時,產生的運算式會反轉。 例如,請考慮下列 Razor 程式碼區段:
@SomeMethod("first param",
100)
@AnotherMethod()
如果您在第一個方法中選取文字「first param」,並將它貼到第二個方法中作為引數,結果如下所示:
@AnotherMethod(param""first)
正確行為是貼上作業後應會產生下列結果:
@AnotherMethod("first param")
RTM 版本中已修正此問題,以便在貼上作業期間正確保留運算式。
在編輯器視窗中開啟檔案時,使用 [方案總管] 重新命名 Razor 檔案會導致語法醒目提示,IntelliSense 停止處理該檔案。 已修正此問題,在重新命名之後可保留醒目提示和 IntelliSense。
本小節描述自 RC 版本以來,ASP.NET MVC 3 RC2 版本中所做的變更 (新增功能和錯誤修正)。
ASP.NET MVC 3 的專案範本現在包含最新版本的 jQuery、jQuery 驗證和 jQuery UI。jQuery UI 是專案範本的新增專案,並提供實用的使用者介面小工具。 如需 jQuery UI 的詳細資訊,請造訪其首頁:http://jqueryui.com/。
您可以使用 AdditionalMetadataAttribute 類別來填入模型屬性的 ModelMetadata.AdditionalValues 字典。
例如,假設檢視模型具有應該只能對系統管理員顯示的屬性。 該模型可以使用 AdminOnly 作為索引鍵和 true 作為值,以新的屬性加上註解,如下列範例所示:
public class ProductViewModel {
[AdditionalMetadata("AdminOnly", true)]
public string RefundCode {get; set;}
}
當呈現產品檢視模型時,此中繼資料可供任何顯示或編輯器範本使用。 身為應用程式開發人員的您,可以解譯中繼資料資訊。
用於 Scaffolding 檢視的 T4 範本現在會產生對範本協助程式方法的呼叫,例如 EditorFor,而不是 TextBoxFor 之類的協助程式。 當 [新增檢視] 對話方塊產生檢視時,此變更會以資料註記屬性的形式改進支援模型中繼資料。
[新增檢視] 建構時也會包含根據慣例,改進模型主要索引鍵資訊的偵測和使用方式。 例如,[新增檢視] 對話方塊會使用這項資訊,以確保主鍵值不會以可編輯的表單欄位形式進行 Scaffold 處理。
預設的 [編輯] 和 [建立] 範本包含用戶端驗證所需的 jQuery 指令碼參考。
根據預設,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 屬性。 這兩個屬性都可讓您使用動態屬性存取子語法,存取 ViewDataDictionary 物件的值。 這兩個屬性都已重新命名為相同名稱,以免混淆,操作起來會更一致。
ControllerSessionStateAttribute 類別是在 ASP.NET MVC 3 的 RC 版本中所引進。 屬性已重新命名,使用起來更簡潔。
RemoteAttribute 類別的 Fields 屬性在使用者之間造成一些混淆。 將此屬性重新命名為 AdditionalFields,釐清其設計用意。
SkipRequestValidationAttribute 屬性已重新命名為 AllowHtmlAttribute,更能代表其預定的使用方式。
已修正 Html.ValidationMessage 方法,使其顯示第一個有用的錯誤訊息,而不只是顯示第一個錯誤。
在模型繫結期間,ModelState 字典可以從多個來源填入有關屬性的錯誤訊息,包括來自模型本身 (如果實作 IValidatableObject)、套用至屬性的驗證屬性,以及從存取屬性時擲回的例外狀況。
當 Html.ValidationMessage 方法顯示驗證訊息時,它會略過包含例外狀況的模型狀態專案,因為這些專案通常不適合終端使用者使用。 相反地,方法會尋找與例外狀況無關的第一個驗證訊息,並顯示該訊息。 如果找不到這類訊息,它會預設為與第一個例外狀況相關聯的泛型錯誤訊息。
在舊版中,@model
檢視頂端的宣告會將空白行新增至呈現的 HTML 輸出。 這個問題已修正,因此宣告不會引入空白文字。
檢視引擎可以使用明確的檢視路徑傳回檢視,如下列範例所示:
return View("~/views/home/index.cshtml");
第一個檢視引擎一律會嘗試呈現檢視。 根據預設,Web Form 檢視引擎是第一個檢視引擎;因為 Web Forms 引擎無法呈現 Razor 檢視,所以會發生錯誤。 檢視引擎現在具有 FileExtensions 屬性,可用來指定其支援的副檔名。 當 ASP.NET 判斷檢視引擎是否可以呈現檔案時,將會檢查這個屬性。 這是重大變更,如需詳細資料,請參閱本文件的重大變更一節。
已修正 LabelFor 方法呈現符合 input 元素之 name 屬性的 for 屬性,而非識別的屬性。 根據 W3C,for 屬性應該與 input 元素的識別碼相符合。
在舊版中,傳遞至 RenderAction 方法的明確值在子動作內的模型繫結期間,會忽略目前的表單值。 修正可確保明確值在模型繫結期間優先處理。
ASP.NET MVC 候選版於 2010 年 11 月 9 日發行。
本小節描述自 Beta 版以來,ASP.NET MVC 3 RC 版本中引進的功能。
ASP.NET MVC 3 包含 NuGet 套件管理員 (先前稱為 NuPack),這是將程式庫和工具新增至 Visual Studio 專案的整合套件管理工具。 此工具會將開發人員今天採取的步驟自動化,以將程式庫放入其來源樹狀結構。
您可以從 Visual Studio 操作功能表使用 NuGet 做為命令行工具、Visual Studio 2010 內的整合式控制台視窗,以及作為一組 PowerShell Cmdlet。
如需 NuGet 的詳細資訊,請參閱 NuGet 文件。
當您建立新的專案時,[新增專案] 對話方塊現在可讓您指定檢視引擎以及 ASP.NET MVC 專案類型。
支援修改在此對話方塊中的範本和檢視引擎清單已經包含在此版本中。
預設範本如下:
空白。 包含 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 驗證屬性可讓您比較模型兩個不同屬性的值。 在下列範例中,ComparePassword 屬性必須符合 Password 欄位才能有效。
public class User {
[Required]
public string Password { get; set; }
[Required, Compare("Password")]
public string ComparePassword { get; set; }
}
新增 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 方法,可讓您用來指定標籤文字。 以下範例會示範如何使用這些多載。
@Html.LabelFor(m => m.PropertyName,
"Label Text");
@Html.LabelForModel("Label Text");
OutputCacheAttribute 支援使用 Html.RenderAction 或 Html.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
ValidateInputAttribute 的 Exclude 屬性已不存在。 相反地,若要在模型繫結期間略過模型的特定屬性要求驗證,請使用新的 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 Beta 於 2010 年 10 月 6 日發行。 下列注意事項專屬於 Beta 版本,並受限於上述 ASP.NET MVC 3 候選版一節中所參考的任何更新或變更。
本節描述 ASP.NET MVC 3 Beta 版本中引進的功能。
ASP.NET MVC 3 包含 NuGet 套件管理員,這是將程式庫和工具新增至 Visual Studio 專案的整合套件管理工具。 在大多數情況下,它會將開發人員今天採取的步驟自動化,以將程式庫放入其來源樹狀結構。
您可以從 Visual Studio 操作功能表使用 NuGet 做為命令行工具、Visual Studio 2010 內的整合式控制台視窗,以及作為一組 PowerShell Cmdlet。
如需 NuGet 的詳細資訊,請參閱 NuGet 文件。
當您建立新的專案時,[新增專案] 對話方塊現在可讓您指定檢視引擎以及 ASP.NET MVC 專案類型。
支援修改在此對話方塊中的範本和檢視引擎清單未包含在此版本中。
預設範本如下:
空白。 包含 ASP.NET MVC 專案的最低檔案集合,包括 ASP.NET MVC 專案的預設目錄結構、包含預設 ASP.NET MVC 樣式的小型 Site.css 檔案,以及包含預設 JavaScript 檔案的 Scripts 目錄。
網際網路應用程式。 包含示範如何使用成員資格提供者搭配 ASP.NET MVC 的範例功能。
使用 CSHTML 檢視的新 @model 指示詞和 @ModelType VBHTML 檢視的指示詞,簡化了為強型別 Razor 檢視指定模型類型的方式。 在舊版的 ASP.NET MVC 中,您可以透過下列方式指定 Razor 檢視的強型別模型:
@inherits System.Web.Mvc.WebViewPage
在此版本中,您可以使用下列語法:
@model MyModelNamespace.MyModelType
新的 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 介面可讓您更精細地控制透過相依性插入具現化控制器的方式。 下列範例展示此介面:
namespace System.Web.Mvc {
using System.Web.Routing;
public interface IControllerActivator {
IController Create(RequestContext requestContext, Type controllerType);
}
}
這與控制器處理站的角色形成對比。 控制器處理站是 IControllerFactory 介面的實作,負責尋找控制器類型,以及具現化該控制器類型的執行個體。
控制器啟動器只負責具現化控制器類型的執行個體。 它們不會執行控制器類型查詢。 找到適當的控制器類型之後,控制器處理站應該委派給 IControllerActivator 執行個體,以處理控制器的實際具現化。
DefaultControllerFactory 類別具有接受 IControllerFactory 執行個體的新建構函式。 這可讓您套用相依性插入來管理建立控制器的這個層面,而不需要覆寫預設控制器類型查詢行為。
根據社群意見反應,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。
新增 IViewPageActivator 介面可讓您更精細地控制透過相依性插入具現化檢視頁面的方式。 這同時適用於 WebFormView 執行個體和 RazorView 執行個體。 以下範例顯示新介面:
namespace System.Web.Mvc {
public interface IViewPageActivator {
object Create(ControllerContext controllerContext, Type type);
}
}
這些類別現在接受 IViewPageActivator 建構函式引數,可讓您使用相依性插入來控制 ViewPage、ViewUserControl 和 WebViewPage 類型的具現化方式。
新版本包含下列服務的相依性解析支援:
ASP.NET MVC 包括 Ajax 協助程式方法,例如:
這些方法會使用 JavaScript 在伺服器上叫用動作方法,而不是使用完整回傳。 這項功能已更新,以低調方式利用 jQuery。 這些協助程式方法不是侵入性地發出內嵌用戶端指令碼,而是使用 data-ajax 前置詞發出 HTML5 屬性,將行為與標記分開。 然後,藉由參考適當的 JavaScript 檔案,將行為套用至標記。 務必參考下列 JavaScript 檔案:
此功能預設會在 ASP.NET MVC 3 新專案範本的 Web.config 檔案中啟用,且預設現有專案將會停用。 如需詳細資訊,請參閱本文件後面已新增全應用程式旗標進行用戶端驗證和低調 JavaScript。
根據預設,ASP.NET MVC 3 Beta 會以低調方式使用 jQuery 驗證,並執行用戶端驗證。 若要啟用低調客戶端驗證,請從檢視內進行如下呼叫:
Html.EnableClientValidation();
這時 ViewContext.UnobtrusiveJavaScriptEnabled 屬性必須設定為 true,您才可以進行下列呼叫:
Html.EnableUnobtrusiveJavaScript();
另請務必參考下列 JavaScript 檔案。
此功能預設會在 ASP.NET MVC 3 新專案範本的 Web.config 檔案中啟用,且預設現有專案將會停用。 如需詳細資訊,請參閱本文件後面新增全應用程式旗標進行用戶端驗證和低調 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 資料夾中。
先前 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
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();
}
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 產品之任何智慧財產權的任何法律權利。 您可以複製和使用本文件,以參考為目的供內部使用。
訓練
學習路徑
Implement finance and operations apps - Training
Plan and design your project methodology to successfully implement finance and operations apps with FastTrack services, data management and more.