首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> .NET 實例教學

ASP.NET Dynamic Data:快速建構資料驅動網站的利器

     編輯:.NET 實例教學

ASP.NET 3.5 Extensions CTP 引入的 ASP.NET Dynamic Data,是一套以慣例優於設定為核心的架構,能讓開發者在幾分鐘內建立完整的資料導向網站(CRUD 頁面、驗證、分頁、排序、外鍵導航),且無需手寫任何 ASPX/CSHTML 頁面。它自動根據 LINQ to SQL 或 Entity Framework 的實體模型,動態產生列表、明細、新增、編輯、刪除頁面。

核心特性

  • Scaffolding 自動生成 UI:依據資料模型慣例產生 List/Details/Edit/Insert 頁面。
  • 豐富的資料註解支援:透過 [DisplayName]、[Required]、[Range]、[UIHint] 等屬性客製化顯示與驗證。
  • 可擴充的 FieldTemplate 與 PageTemplate:可自訂欄位編輯器(如下拉選單、日期選擇器)與頁面版型。
  • 內建 LINQ to SQL / Entity Framework 整合:自動處理關聯導航、外鍵下拉選單。
  • 路由整合:乾淨的 REST 風格 URL(/Products/Edit/5)。

快速上手步驟 (ASP.NET 3.5 / 4.x WebForms 專案)

  1. 安裝 ASP.NET 3.5 Extensions (或直接使用 .NET 3.5 SP1 內建)。
  2. 專案加入參考:System.Web.DynamicData、System.ComponentModel.DataAnnotations。
  3. 建立 LINQ to SQL 類別 (.dbml) 或 Entity Framework 模型 (.edmx)。
  4. Global.asax 中註冊模型:
    MetaModel.Default.RegisterContext(typeof(MyDataContext), new ContextConfiguration() { ScaffoldAllTables = true });
  5. web.config 確認 <httpModules>、<handlers> 已載入 DynamicData 模組。
  6. 執行專案,瀏覽 ~/DynamicData/ 即可看到自動產生的管理介面。

客製化重點

1. 欄位樣板

在 ~/DynamicData/FieldTemplates/ 下建立 Enum_Edit.ascx、ForeignKey_Edit.ascx 等,或使用 [UIHint("CustomTemplate")] 指定特定欄位使用自訂樣板。

2. 頁面樣板

修改 ~/DynamicData/PageTemplates/List.aspx、Edit.aspx 等,調整版面配置、加入按鈕、整合權限控制。

3. 中繼資料類別

[MetadataType(typeof(ProductMetadata))]
public partial class Product { }

public class ProductMetadata {
    [DisplayName("產品名稱")]
    [Required(ErrorMessage = "必填")]
    [StringLength(100)]
    public string Name { get; set; }

    [UIHint("Currency")]
    public decimal Price { get; set; }

    [ScaffoldColumn(false)]
    public DateTime CreatedDate { get; set; } // 隱藏欄位
}

適用情境與限制

適用不適用
後台管理介面 (Admin/Back-office) 高度客製化的前台使用者介面
快速原型開發、內部工具 複雜商業邏輯交互流程 (Wizard、多步驟表單)
標準 CRUD 為主的資料維護 需要精細像素級控制的設計導向專案

現代替代方案

ASP.NET Core 時代,Dynamic Data 已不再積極維護。現代專案建議採用:

Dynamic Data 為當時「無程式碼生成管理介面」的先驅,其慣例優於設定的設計哲學,至今仍影響著現代 Scaffolding 與 Low-Code 工具的發展。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved