連續(xù)一個(gè)星期翻譯了好幾篇在MSDN上本人學(xué)習(xí)的相關(guān)內(nèi)容,我也能希望將所有的asp.net 4中的一些新特性的使用方法學(xué)會(huì),然后同時(shí)也盡早的翻譯給大家,因?yàn)槲椰F(xiàn)在也還沒(méi)看到MSDN這方面的中文文檔。
源碼下載 (包含VB和C#)
啟動(dòng) Visual Studio。
在“File”菜單中單擊“New”,再單擊“Project”。
將顯示“New Project”對(duì)話框。
在“Installed Templates”下的左側(cè)窗格中,選擇“Visual C#”,然后選擇“Web”。
在“Installed Templates”下,選擇“ASP.NET Web 應(yīng)用程序”。
在“Location”框中輸入要保存 Web 應(yīng)用程序的文件夾的名稱(chēng)。例如,輸入文件夾名稱(chēng)“C:\WebApplications\EnableDynamicData”。
單擊“OK”。
下一步是添加數(shù)據(jù)庫(kù)。
在“Solution Explorer”中,右擊 App_Data 文件夾,然后單擊“Add Exiting”。
在“Add Exiting”對(duì)話框中,輸入 AdventureWorksLT 數(shù)據(jù)庫(kù)文件 (AdventureWorksLT.mdf) 的存儲(chǔ)位置,然后單擊“Add”。
您現(xiàn)在可以創(chuàng)建一個(gè)數(shù)據(jù)模型,其中包含表示數(shù)據(jù)庫(kù)表的類(lèi)。動(dòng)態(tài)數(shù)據(jù)使用這些類(lèi)來(lái)實(shí)現(xiàn)與數(shù)據(jù)庫(kù)的交互。在本演練中,您將使用 LINQ-to-SQL 數(shù)據(jù)模型。但是,可以改用 ADO.NET Entity Framework 數(shù)據(jù)模型。(您還可以在不使用任何數(shù)據(jù)模型的情況下手動(dòng)創(chuàng)建這些類(lèi),但是本次演示中不顯示這種情況。)
在“Solution Explorer”中右擊項(xiàng)目名稱(chēng),然后單擊“Add”。
單擊“New Item”。
在“Installed Templates”下的左側(cè)窗格中,選擇“Data”。
在中間窗格中,單擊“LINQ to SQL Classes”。
在“Name”框中,輸入數(shù)據(jù)庫(kù)模型的名稱(chēng) AdventureWorksLT.dbml。
單擊“Add”。
此時(shí)將顯示“對(duì)象關(guān)系設(shè)計(jì)器”。有關(guān)更多信息,請(qǐng)參見(jiàn)對(duì)象關(guān)系設(shè)計(jì)器(O/R 設(shè)計(jì)器)。
在對(duì)象關(guān)系設(shè)計(jì)器(Object Relational Designer)中,單擊“Server Explorer”鏈接。
在“Server Explorer”中,在“Data Connections”下面,展開(kāi)“AdventureWorksLT_Data.mdf”節(jié)點(diǎn),然后展開(kāi)“Tables”節(jié)點(diǎn)。
選擇所有表并將其拖到對(duì)象關(guān)系設(shè)計(jì)器窗口中。
在顯示的關(guān)系圖中,選擇 SalesOrdersDetail 表的所有列。
在相關(guān)的“Properties”窗口中,將“更新檢查”屬性設(shè)置為“Never”。
關(guān)閉“Server Explorer”。
保存并關(guān)閉 AdventureWorksLT.dbml 文件。
您已經(jīng)創(chuàng)建了一個(gè)表示 AdventureWorksLT 數(shù)據(jù)庫(kù)的數(shù)據(jù)模型。
下一步是創(chuàng)建能讓?xiě)?yīng)用程序訪問(wèn)并處理數(shù)據(jù)庫(kù)信息的代碼。(在動(dòng)態(tài)數(shù)據(jù) Web 應(yīng)用程序中,將會(huì)自動(dòng)生成此邏輯。但本演練演示如何創(chuàng)建此代碼以用于 ObjectDataSource控件。)對(duì)于本演練,自定義邏輯由一些方法組成,這些方法列出并修改 SalesOrderDetail 表中包含的數(shù)據(jù)字段。
在“Solution Explorer”中右擊項(xiàng)目名稱(chēng),然后單擊“Add”。
單擊“New Item”。
在“Installed Templates”下的左側(cè)窗格中,單擊“Code”。
在中心窗格中,單擊“Code File”。
在“Name”框中輸入ProcessingOrderDetails.cs,然后單擊“Add”。
將下面的代碼復(fù)制到新類(lèi)中,這樣會(huì)替換文件中的所有已有代碼。
該類(lèi)包含下列方法:GetSalesOrderDetails.該方法返回 SalesOrderDetail 表中的數(shù)據(jù)行。該方法實(shí)例化數(shù)據(jù)庫(kù)上下文對(duì)象,然后使用 SalesOrderDetails 類(lèi)來(lái)獲取行的集合。
Update.該方法更改 SalesOrderDetail 表中的列值。該方法實(shí)例化數(shù)據(jù)庫(kù)上下文對(duì)象,然后將 SalesOrderDetail 表中的更改提交到數(shù)據(jù)庫(kù)。
保存并關(guān)閉文件。
從“Build”菜單中,單擊生成 EnableDynamicData(或者用于 Web 應(yīng)用程序的名稱(chēng))以生成解決方案。
這樣會(huì)使業(yè)務(wù)對(duì)象可用于下一個(gè)過(guò)程。
本部分演示如何配置動(dòng)態(tài)綁定控件,以使它可以使用頁(yè)模板和驗(yàn)證等從數(shù)據(jù)庫(kù)架構(gòu)或從自定義元數(shù)據(jù)中推斷的功能。您的應(yīng)用程序僅需啟用動(dòng)態(tài)數(shù)據(jù)即可使用這些功能。該控件用于顯示和更改 SalesOrderDetail 表中包含的值。
第一步是配置數(shù)據(jù)源控件,用以與數(shù)據(jù)庫(kù)交互。
在“Solution Explorer”中右擊項(xiàng)目名稱(chēng),然后單擊“Add”。
單擊“new Item”。
在“已安裝的模板”下的左側(cè)窗格中,單擊“Web”。
在中心窗格中,單擊“Web Form”。
在“Name”框中,輸入 EnableDynamicData.aspx,然后單擊“添加”。
切換到“Design”視圖。
從“toolbox”的“data”組中,將一個(gè)ObjectDataSource 控件添加到該頁(yè)上。
在“ObjectDataSource Tasks”菜單上,單擊“Configure Data Source”。
此時(shí)將顯示“Choose a Business Object”對(duì)話框。
在“Choose your Business Object”列表中,選擇您在前一過(guò)程中創(chuàng)建的 ProcessingOrderDetails 類(lèi)。
單擊“Next”。
將顯示“Define Data Methods”對(duì)話框。
在“Choose a method”選項(xiàng)卡窗格的“Select”列表中,選擇 GetSalesOrderDetails 方法。
單擊“Update”選項(xiàng)卡。
在“Update”選項(xiàng)卡窗格的“Choose a method”列表中,選擇 Update 方法。
單擊“finish”。
您已經(jīng)將數(shù)據(jù)源控件配置為使用 ProcessingOrderDetails 類(lèi)來(lái)通過(guò)數(shù)據(jù)模型與數(shù)據(jù)庫(kù)交互。
下一步是創(chuàng)建數(shù)據(jù)綁定控件并對(duì)其啟用動(dòng)態(tài)數(shù)據(jù)。然后,該控件可以依賴(lài)于動(dòng)態(tài)數(shù)據(jù)功能來(lái)創(chuàng)建用于顯示和編輯數(shù)據(jù)的 UI。
從“Toolbox”的“Data”組中,將一個(gè) GridView 控件添加到該頁(yè)上。
在“GridView Tasks”菜單的“Choose Data Source”列表中,選擇 ObjectDataSource1。
這是您在前一過(guò)程中創(chuàng)建的 ObjectDataSource 控件的 ID。
啟用paging、editing和selection。
切換到“Source”視圖。
在 GridView 控件的 Columns 元素中,刪除所有自動(dòng)生成的 DataBoundField 控件。(保留 CommandField 元素。)
通過(guò)將 AutoGenerateColumns 特性設(shè)置為 true 啟用列的自動(dòng)生成功能,如下面的示例所示:
保存并關(guān)閉 EnableDynamicData.aspx 文件。
打開(kāi)EnableDynamicData.aspx.cs 類(lèi)文件。
添加對(duì) System.Web.DynamicData 命名空間的引用,如下面的示例所示:
using System.Web.DynamicData
在 Page_Init 方法中對(duì) GridView 控件啟用動(dòng)態(tài)數(shù)據(jù),如下面的示例所示:
保存并關(guān)閉文件。
重新生成應(yīng)用程序。
本節(jié)演示如何通過(guò)驗(yàn)證以下內(nèi)容來(lái)測(cè)試動(dòng)態(tài)數(shù)據(jù)功能是否已集成到 GridView 控件中:
該自定義業(yè)務(wù)邏輯與數(shù)據(jù)庫(kù)正確交互。
對(duì)數(shù)據(jù)字段的更改進(jìn)行動(dòng)態(tài)數(shù)據(jù)驗(yàn)證。
動(dòng)態(tài)數(shù)據(jù)生成錯(cuò)誤消息,這些錯(cuò)誤消息基于動(dòng)態(tài)數(shù)據(jù)從數(shù)據(jù)庫(kù)架構(gòu)元數(shù)據(jù)中推斷的信息。
在“Solution Explorer”中,右擊 EnableDynamicData.aspx 頁(yè),然后單擊“在瀏覽器中查看”。
瀏覽器中顯示一個(gè)頁(yè)面,其中顯示 SalesOrderDetail 表。
驗(yàn)證顯示的 SalesOrderDetails 數(shù)據(jù)字段是否正確。
在任意行上單擊“Edit”,為 UnitPrice 列輸入一個(gè)非數(shù)字值。
在同一行上,單擊“Update”。
動(dòng)態(tài)數(shù)據(jù)將顯示一條錯(cuò)誤消息,警告您 UnitPrice 字段必須為十進(jìn)制值。請(qǐng)注意,用于編輯的 UI 基于動(dòng)態(tài)數(shù)據(jù)默認(rèn)模板。
在同一行上,單擊“Cancel”。
在任意行上單擊“Edit”,然后將 OrderQty 列更改為一個(gè)小于或等于數(shù)據(jù)庫(kù)允許的最大整數(shù) (32767) 的值。
在同一行上,單擊“Update”。
動(dòng)態(tài)數(shù)據(jù)將更新該數(shù)據(jù)庫(kù)。由于您輸入的值有效,數(shù)據(jù)會(huì)通過(guò)動(dòng)態(tài)數(shù)據(jù)驗(yàn)證。
在任意行上單擊“Edit”,然后將 OrderQty 列更改為一個(gè)大于數(shù)據(jù)庫(kù)允許的最大整數(shù) (32767) 的值。
在同一行上,單擊“Update”。
動(dòng)態(tài)數(shù)據(jù)會(huì)顯示一條錯(cuò)誤消息,指出您輸入了無(wú)效的值。
在同一行上,單擊“Cancel”。
這表明動(dòng)態(tài)數(shù)據(jù)功能已集成到 GridView 控件中,而且它使用從數(shù)據(jù)庫(kù)架構(gòu)中獲得的元數(shù)據(jù)信息。驗(yàn)證是應(yīng)用程序從動(dòng)態(tài)數(shù)據(jù)中繼承的功能的一部分。
關(guān)閉瀏覽器。
在本部分演練中,您會(huì)向數(shù)據(jù)庫(kù)架構(gòu)中添加自定義信息(元數(shù)據(jù))。動(dòng)態(tài)數(shù)據(jù)在處理數(shù)據(jù)字段時(shí)使用該元數(shù)據(jù)。例如,您可以為數(shù)據(jù)庫(kù)允許的數(shù)據(jù)字段以外的數(shù)據(jù)字段定義值范圍。在本演練中,您將添加自定義信息以要求 UnitPrice 值(對(duì)數(shù)據(jù)庫(kù)來(lái)說(shuō)不是必需字段)并設(shè)置 OrderQty 值的范圍。
在“Solution Explorer”中,右擊項(xiàng)目名稱(chēng),然后選擇“Add Refereence”。
即會(huì)顯示“Add Reference”對(duì)話框。
單擊“.NET”選項(xiàng)卡。
從列表中選擇 System.ComponentModel.DataAnnotations。
單擊“OK”。
打開(kāi)EnableDynamicData.aspx.cs 文件。
將下面的代碼復(fù)制到該文件中,這樣會(huì)替換文件中的所有已有代碼。
此代碼創(chuàng)建兩個(gè)類(lèi):名為 SalesOrderDetail 的分部類(lèi)及其內(nèi)部的名為 SalesOrderDetailMetadata 的類(lèi)。
這些類(lèi)擴(kuò)展數(shù)據(jù)模型,能讓您執(zhí)行以下任務(wù):
向 UnitPrice 數(shù)據(jù)字段中添加元數(shù)據(jù)以防止出現(xiàn)空值。(AdventureWorks 數(shù)據(jù)庫(kù)允許 UnitPrice 數(shù)據(jù)字段為空值。)當(dāng)用戶(hù)嘗試輸入空值時(shí),動(dòng)態(tài)數(shù)據(jù)將發(fā)出錯(cuò)誤消息。
向 OrderQty 數(shù)據(jù)字段中添加元數(shù)據(jù)以設(shè)置允許的范圍。AdventureWorks 數(shù)據(jù)庫(kù)對(duì) OrderQty 數(shù)據(jù)字段沒(méi)有范圍限制。當(dāng)用戶(hù)嘗試輸入超出允許范圍的值時(shí),動(dòng)態(tài)數(shù)據(jù)將發(fā)出錯(cuò)誤消息。
以這種方式使用分部類(lèi)可提供一種靈活的方式來(lái)修改數(shù)據(jù)模型的行為,而不必直接更改數(shù)據(jù)模型。
保存并關(guān)閉文件。
本部分演示如何測(cè)試動(dòng)態(tài)數(shù)據(jù)是否根據(jù)您提供的元數(shù)據(jù)執(zhí)行驗(yàn)證。您將測(cè)試以下內(nèi)容:
動(dòng)態(tài)數(shù)據(jù)根據(jù)自定義元數(shù)據(jù)對(duì)數(shù)據(jù)字段的更改進(jìn)行正確驗(yàn)證。
動(dòng)態(tài)數(shù)據(jù)根據(jù)從自定義元數(shù)據(jù)信息中推斷的信息來(lái)生成錯(cuò)誤消息。
在“Solution Explorer”中,右擊 EnableDynamicData.aspx 頁(yè),然后選擇“View in Browser”。
瀏覽器中顯示一個(gè)頁(yè)面,其中顯示 SalesOrderDetails 表。
在任一行上,單擊“Edit”并清除 UnitPrice 列值。
在同一行上,單擊“Update”。
動(dòng)態(tài)數(shù)據(jù)將顯示一條錯(cuò)誤消息,警告您 UnitPrice 字段是必需的。這表明動(dòng)態(tài)數(shù)據(jù)驗(yàn)證已集成到 GridView 控件中,而且它使用您提供的自定義元數(shù)據(jù)信息。
在同一行上,單擊“Cancel”。
在任意行上單擊“Edit”,然后將 OrderQty 列更改為允許范圍內(nèi)的值,如 25。
在同一行上,單擊“Update”。
動(dòng)態(tài)數(shù)據(jù)將更新該數(shù)據(jù)庫(kù)。由于您輸入的值有效,數(shù)據(jù)會(huì)通過(guò)驗(yàn)證。
在任意行上單擊“Edit”,然后將 OrderQty 列更改為允許范圍外的值,如 250。
在同一行上,單擊“Update”。
動(dòng)態(tài)數(shù)據(jù)將顯示一條錯(cuò)誤消息,指出數(shù)據(jù)字段值必須介于 0 和 100 之間。這表明已經(jīng)使用自定義元數(shù)據(jù)信息,將動(dòng)態(tài)數(shù)據(jù)驗(yàn)證集成到 GridView 控件中。
在同一行上,單擊“Cancel”。
聯(lián)系客服