共用方式為


ASP.NET 動態資料欄位範本概觀

更新:2007 年 11 月

ASP.NET Dynamic Data 欄位範本是 ASP.NET 使用者控制者,能夠將資料控制項對應到資料模型中的資料型別。欄位範本衍生自能夠存取資料模型中的資料欄位、資料行和中繼資料的 FieldTemplateUserControl 類別。根據預設,動態資料專案會提供預設欄位範本,但是您可以進行修改或建立自訂欄位範本。這個概觀主題會討論:

  • 功能

  • 背景

  • 預設欄位範本

  • 使用欄位範本

  • 欄位範本呈現的方式 

功能

  • 動態資料使用欄位範本來呈現資料模型中的資料欄位。

  • 動態資料可以讓您:

    • 修改預設欄位範本

    • 建立自訂欄位範本

背景

動態資料支援資料驅動的 Web 應用程式。若與 ASP.NET 資料來源控制項以及如 GridView 與 ListView 等的現有資料來源控制項相比,在存取資料時,動態資料僅需要很少量的程式碼便可以完成。例如,Northwind 資料庫中的 Products 資料表,在 Categories 與 Suppliers 資料表中都有外部索引鍵。如果要利用 GridView 或 ListView 控制項顯示這類的關聯性,您必須了解資料庫結構描述並且手動設定這些控制項,也許還需要您撰寫程式碼。

然而,動態資料可以透過讀取資料庫結構描述,取得與資料型別和外部索引鍵相關的資訊。動態資料提供能夠辨認資料庫結構描述的 ASP.NET 資料控制項,這些控制項經過設計後,可以讓您更輕易地存取並操作資料。若要取代預設 GridView 及 DetailsView 的呈現,請手動在每一個頁面上提供要呈現的程式碼。欄位範本是該您全域變更 GridViewDetailsView 控制項預設呈現方式的簡易方法。

動態資料控制項中會使用欄位範本來顯示個別的資料欄位。動態資料使用預設欄位範本,來建立顯示與編輯資料的預設呈現。您可以自訂預設欄位範本或建立新的範本。

例如,在 Northwind 資料庫的 Products 資料表中使用欄位範本,您可以顯示類別名稱而不是分別 ID、在編輯模式中提供下拉式清單方塊,並且連結到其他頁面,如顯示相關資料的詳細資料頁面。

如需建立能夠感知資料庫結構描述的豐富型資料控制項,請參閱將動態行為加入至 ASP.NET 資料繫結控制項

使用欄位範本的動態資料控制項

使用欄位範本自動根據資料型別呈現動態資料控制項包括下列幾項:

預設欄位範本

預設欄位範本為內建於動態資料 Web 應用程式中的範本。這些預設欄位範本的範例有:

ForeignKey.ascx:顯示具有多對一關聯性的欄位。

ForeignKey_Edit.ascx:用於編輯顯示具有多對一關聯性的欄位。

DateTime.ascx:以文字顯示 DateTime 資料型別。

動態資料提供呈現如布林值、十進位、整數及文字等資料型別的預設欄位範本。

如需預設欄位範本的詳細資訊,請參閱 ASP.NET 動態資料預設欄位範本

使用欄位範本

若要實作您可以從資料庫取得值的欄位範本並且顯示欄位範本,利用 IBindableControl.ExtractValues 方法取出值,並且讓 DataControl 控制項且有存取權。

動態資料可以讓您自訂預設欄位範本或建立新的欄位範本。如果要自訂預設欄位範本,動態資料便會使用您已自訂的預設欄位範本。

自訂預設欄位範本顯示資料的方式

預設欄位範本是 ASP.NET 使用者控制者,能夠對應到資料模型中的資料型別。這些控制項衍生自能夠存取資料欄位、資料庫資料行和中繼資料的 FieldTemplateUserControl 類別。

您可以修改預設欄位範本,以變更資料控制項呈現資料的方式。例如,您可以變更資料控制項 (使用預設欄位範本) 中文字顯示的背景與前景色彩。如需詳細資訊,請參閱 HOW TO:自訂 ASP.NET 動態資料預設欄位範本

建立自訂欄位範本

您也可以建立自訂欄位範本。若要進行這個步驟,您可以建立衍生自 FieldTemplateUserControl 類別的 ASP.NET 使用者控制項。您可以加入將資料欄位對應於新建立之控制項的 UIHint 屬性,讓這個屬性可以用於預設欄位範本中。

如需如何建立自訂欄位範本的詳細資訊,請參閱 HOW TO:自訂資料模型中的資料欄位顯示。如需如何使用 UIHint 屬性的詳細資訊,請參閱 HOW TO:自訂動態資料控制項中的資料欄位外觀和行為

欄位範本呈現的方式 

動態資料會在顯示、編輯與插入模式中呈現預設與自訂欄位範本。動態資料使用查詢規則來確認要呈現哪一個欄位範本。動態資料使用的查詢規則會視控制項處於顯示、編輯或插入模式而異。例如,如果資料行中的資料為一個布林值且資料控制項處於顯示模式,那麼動態資料會呈現 Boolean.ascx,亦即顯示 Boolean 資料型別的預設欄位範本。但是,如果資料控制項處於編輯模式,那麼動態資料會呈現 Boolean_Edit.ascx,亦即可以編輯 Boolean 資料型別的欄位範本。如果資料控制項處於插入模式,那麼動態資料會呈現 Boolean_Insert.ascx,亦即可以讓使用者插入 Boolean 資料型別的欄位範本。

如果資料模型中的資料欄位有一個與其關聯的 UIHint 屬性,換言之,如果已指定了自訂欄位範本,那麼動態資料會根據 UIHint 名稱查詢控制項。例如,如果 UIHint 屬性指定 MyTemplate,那麼動態資料會搜尋名稱為 MyTemplate.ascx 的欄位範本,若為編輯模式,則搜尋 MyTemplate_Edit.ascx,若為插入模式,則搜尋 MyTemplate_Insert.ascx。如果沒有找到這類控制項,動態資料預設為使用預設的欄位範本。

查詢規則

動態資料會以確認欄位範本的模式來開始查詢。動態資料會對每一種不同的模式,套用一組查詢規則。

顯示模式查詢

以下列出動態資料用來呈現顯示模式中欄位範本的查詢規則:

  1. 如果有 UIHint (亦即自訂欄位範本) 中繼資料,動態資料會根據使用者控制項名稱,以及 UIHintDataTypeAttribute 屬性中定義的 DataTypeAttribute,來查詢控制項。根據預設,動態資料不會顯示所有資料型別。例如,根據預設,不會呈現如二進位、時間戳記、影像型別的 Byte[] 資料型別。如需動態資料預設顯示資料型別的詳細資訊,請參閱 ASP.NET 動態資料預設欄位範本。如需如何顯示自訂資料型別的詳細資訊,請參閱 DataTypeAttribute

  2. 動態資料會根據資料庫中的資料行判斷資料型別,然後根據資料別查詢控制項。資料型別名稱的判斷及使用會根據下列順序:

    1. 查詢完整的資料型別名稱,例如 System.Int32。

    2. 如果沒有找到完整型別名稱,動態資料會查詢簡單的資料型別名稱,例如 int32。

    3. 如果沒有找到簡單的型別名稱,會查詢資料表中定義的特殊案例。例如,如果找不到如 Int32 的簡單型別名稱,動態資料會查詢 Integer,即查詢資料表中定義的特殊案例。如果沒有找到簡單的型別 String,則會查詢 String 特殊案例中的 Text。

    4. 如果沒有找到特殊案例而且有後援資料型別,則會查詢後援資料型別。動態資料會使用後援資料型別,從頭執行查詢。

    5. 如果沒有後援資料型別,動態資料不會顯示任何資料。

  3. 如果欄位為外部索引鍵,那麼動態資料會呈現用於多對一關聯性預設欄位範本的 ForeignKey.ascx,或是用於一對多關聯性預設欄位的 Children.ascx。

如果沒有找到欄位範本控制項,動態資料會顯示錯誤訊息,指出沒有找到欄位範本而且不會顯示任何資料。

編輯模式查詢

編輯模式的查詢規則與顯示模式的類似,不過有下列的例外情況:如果欄位範本處於編輯模式,那麼動態資料會搜尋 "_Edit" 的欄位範本 (例如 MyTemplate_Edit) 並且套用相關規則,否則會預設為顯示 (唯讀) 模式。

插入模式查詢

插入模式的查詢規則與顯示模式的類似,不過有下列的例外情況:如果欄位範本處於插入模式,那麼動態資料會搜尋 "_Insert" 的欄位範本 (例如 MyTemplate_Insert) 並且套用相關規則,否則會查詢 _Edit 欄位範本。

注意事項:

根據預設,不會提供 "_Insert.ascx" 使用者控制項。

後援資料型別

資料型別

Decimal

Float、Double

Int

Int16、byte、Long

String

Char、Int、Decimal、GUID、DateTime、DateTimeOffset、TimeSpan

類別參考

類別

說明

FieldTemplateUserControl

所有 FieldTemplateUser 控制項的基底類別。

其他主題

將動態行為加入至 ASP.NET 資料繫結控制項

ASP.NET 動態資料 Scaffolding 和頁面範本概觀