文章目錄
- 建立動態資料網站
- 檢驗動態資料網站
- 深入理解動態資料項目
ASP.NET 動態資料讓我們能夠以少許的努力快速構建以資料為中心的 Web 應用程式。它通過解析資料模型架構中的類型資訊填充模板頁面,這完全不需要代碼或僅需要極少量的代碼。15 分鐘的工作足以讓人獲得深刻的印象,而在建立這些基礎的功能後,還可進行大量自訂。
瞭解 ASP.NET 動態資料程式的最佳起點是建立一個樣本網站,只有這樣你才能知道它的設定和運行是多麼容易,以及有多少現成的功能可用。ASP.NET 動態資料網站的核心是資料庫模型。可以使用 LINQ to SQL 或者Entity Framework來產生資料庫模型。本文會使用 LINQ to SQL 。
建立動態資料網站
- 建立一個新的 ASP.NET 動態資料項目。在 Visual Studio 中建立 ASP.NET Dynamic Data Linq to SQL 網站
- 新增一個 LINQ to SQL 類,你會被提示將它放入 App_Code 目錄中
- 將 Northwind 資料庫中的 Customer、Order、Order_Detail、Product 表拖放到 Northwind.dbml 檔案的設計器視窗
此時的 Visual Studio 的情況應類似於這樣:
將這個資料模型註冊到 ASP.NET 動態資料系統。開啟 Global.aspx 檔案,反注釋 RegisterRoutes 方法中調用 DefaultModel.RegisterContext 的行,如下:
在這一行上執行 2 處修改,見紅色:
DefaultModel.RegisterContext(typeof(
NorthwindDataContext
),
new ContextConfiguration() { ScaffoldAllTables = true });
修改類型是為了註冊資料模型。修改 ScaffoldAllTables 屬性的值是讓 ASP.NET 動態資料系統暴露我們添加到 Web 應用程式資料模型的全部 4 張表(以後我們會做更嚴格的控制)。
檢驗動態資料網站
現在運行程式會看到如下的基架介面,ASP.NET 動態資料系統從資料模型中取得了這 4 張表並根據它們構建了頁面結構,你可以看到 Default.aspx 頁面上有每個表的連結:
單擊 Customers 連結,可以看到一個包含了 Northwind.Customers 表前 10 條記錄的頁面:
ASP.NET 動態資料系統根據資料模型建立了表,你可以看到網頁上的表格列和資料庫表 Customers 的列相對應。
建立好的基架可以做很多有趣的事情:
- 頁面的下方可以修改分頁的記錄數,也可以在頁面間切換或跳轉到指定的頁
- 每行左端的 3 個按鈕可以完成相應操作
- 最右側,ASP.NET 動態資料系統識別出了 Customers 表和 Orders 表之間的外鍵關係,並未每個記錄自動添加了導航的連結
單擊其中任意一個連結,就會看到顯示某個選中客戶的全部訂單的頁面:
注意頁面最右側,ASP.NET 動態資料系統通過資料模型識別出 Orders 表有兩個外鍵關係:
返回首頁,單擊 Orders 連結,注意這裡有個 Customers 下拉式清單方塊(怎麼用,你懂的):
深入理解動態資料項目
通過產生資料模型並修改了一行代碼,我們就建立了一個暴露資料庫表的 Web 應用程式,並且以智能且實用的方式實現了它。我們得到了完整的 CRUD 支援並靈活的使用外鍵進行記錄的導航,你不覺得這很酷嗎?
現在,該看看項目自身並理解其中主要的部分了。ASP.NET 動態資料系統並不是你可能期望的那個代碼產生功能。它其實是一個非常靈活且可配置的模板系統。下面我們就對項目進行一下剖析,看圖:
- App_Code 目錄包含程式碼,現在只有資料模型類。不過後續為了對網站進行自訂,我們將陸續添加一些代碼
- DynamicData 目錄中,展開 PageTemplates 目錄,你會看到 5 個模板(它們都是用富資料控制項構建的使用者控制項)。
- Filters 目錄包含了用於過濾記錄列表的控制項
- FieldTemplates 目錄用於顯示不同資料欄位的控制項
- EntityTemplates 目錄支援 ASP.NET 4 新增的名為實體模板的動態資料特性,是 DynamicData 控制項用來格式化資料元素的標記
- CustomsPages 目錄支援自訂 ASP.NET 動態資料網站的某種機制。你可以把自訂的模板放到這裡以自訂資料顯示的方式
- Content 目錄包含呈現使用的靜態元素以及用於翻閱記錄列表的控制項
- Global.aspx 在 ASP.NET 動態資料項目裡非常非常的重要,它用於註冊資料模型,還用於註冊路由!