ASP.NET 动态数据字段模板概述
更新:2007 年 11 月
ASP.NET 动态数据字段模板是将数据控件映射为数据模型中的数据类型的 ASP.NET 用户控件。字段模板派生自 FieldTemplateUserControl,通过该类能够访问数据模型中的数据字段、数据列以及元数据。默认情况下,动态数据项目提供某些默认字段模板,但您可以修改它们或创建自定义字段模板。本概述主题讨论:
功能。
背景。
默认字段模板。
使用字段模板。
字段模板的呈现方式。
功能
动态数据使用字段模板呈现数据模型中的各个数据字段。
利用动态数据,您可以执行以下操作:
修改默认字段模板。
创建自定义字段模板。
背景
动态数据支持数据驱动的 Web 应用程序。与使用 ASP.NET 数据源控件和现有数据控件(例如 GridView 和 ListView 控件)访问数据相比,动态数据所需的代码要少得多。例如,Northwind 数据库中的 Products 表在 Categories 和 Suppliers 表中有外键。使用 GridView 或 ListView 控件显示这种关系要求您了解数据库架构,手动配置控件,并且可能需要编写代码。
但是,通过阅读数据库架构,动态数据可以获取有关数据类型和外键的信息。动态数据提供 ASP.NET 数据控件,这些控件识别数据库架构并且进行了配置,使您能够更方便地访问和操作数据。若要替换 GridView 和 DetailsView 控件的默认呈现,需要手动提供用于在每个页面上呈现的代码。字段模板提供了一种更简单的方法,可全局性地更改 GridView 和 DetailsView 控件的默认呈现。
在动态数据控件中使用字段模板来显示各个数据字段。动态数据使用默认字段模板来创建用于显示和编辑数据的默认呈现。可以自定义默认字段模板,也可以创建新的字段模板。
例如,通过将字段模板用于 Northwind 数据库中的 Products 表,可以显示类别名称而不显示类别 ID,在编辑模式下提供下拉列表框,以及链接到其他页面,例如显示相关数据的详细信息页。
有关如何创建识别数据库架构的丰富数据控件的信息,请参见向 ASP.NET 数据绑定控件添加动态行为。
使用字段模板的动态数据控件
使用字段模板基于数据类型自动呈现数据的动态数据控件包括以下项:
DynamicControl - 用于 FormView、ListView 以及支持使用模板在数据模型中显示和编辑数据的任何控件,例如 GridView 和 DetailsView。通过此控件还能够在数据列中使用模板。有关更多信息,请参见如何:在模板化数据绑定控件中使用 ASP.NET 动态数据。
ForeignKey.ascx - 用于显示外键列的默认字段模板。可以通过 DynamicField 和 DynamicControl 对象公开和访问 href。
Children.ascx - 用于显示外键列的默认字段模板。href 和 AllowNavigation 属性可通过 DynamicField 和 DynamicControl 进行设置。
DynamicField - 尽管 DynamicField 是 DataControlField,但是此处提到它是因为它用在 GridView 和 DetailsView 数据控件以显示、编辑验证逻辑以及将验证逻辑添加到数据模型中。有关更多信息,请参见如何:使用 DynamicField 向数据绑定控件添加动态行为。
默认字段模板
默认字段模板是内置于动态数据 Web 应用程序中的字段模板。这些默认字段模板的示例包括:
ForeignKey.ascx - 显示具有多对一关系的字段。
ForeignKey_Edit.ascx - 用于编辑具有多对一关系的字段。
DateTime.ascx - 将 DateTime 数据类型显示为文本。
动态数据提供呈现数据类型(例如布尔型、十进制、整数和文本)的默认字段模板。
有关默认字段模板的更多信息,请参见 ASP.NET 动态数据默认字段模板。
使用字段模板
若要实现字段模板,可以从数据库中获取值并显示该值,使用 IBindableControl.ExtractValues 方法提取值,以及提供对 DataControl 控件的访问。
利用动态数据,可以自定义默认字段模板,也可以创建新的字段模板。如果自定义默认字段模板,则动态数据使用您自定义的默认字段模板。
自定义默认字段模板显示数据的方式
默认字段模板是映射为数据模型中的数据类型的 ASP.NET 用户控件。这些控件派生自 FieldTemplateUserControl 类,通过该类能够访问数据字段、数据库列以及元数据。
可以修改默认字段模板来更改数据控件呈现数据的方式。例如,可以更改显示在使用默认字段模板的数据控件中的文本的背景色和前景色。有关更多信息,请参见如何:自定义 ASP.NET 动态数据默认的字段模板。
创建自定义字段模板
还可以创建自定义字段模板。为此,可以创建一个派生自 FieldTemplateUserControl 类的 ASP.NET 用户控件。添加将数据字段映射为新创建的控件的 UIHint 属性,这样就可以代替默认字段模板使用该字段。
有关如何创建自定义字段模板的信息,请参见如何:在数据模型中自定义数据字段显示。有关如何使用 UIHint 属性的信息,请参见如何:在动态数据控件中自定义数据字段的外观和行为。
字段模板的呈现方式
动态数据可以在显示、编辑和插入模式下呈现默认和自定义字段模板。动态数据使用查找规则来确定要呈现的字段模板。动态数据使用的查找规则取决于控件是处于显示模式、编辑模式还是插入模式。例如,如果列中的数据是布尔值,并且数据控件处于显示模式,则动态数据呈现默认字段模板 Boolean.ascx,该模板显示布尔数据类型。但是,如果数据控件处于编辑模式,则动态数据呈现字段模板 Boolean_Edit.ascx,该模板用于编辑布尔数据类型。如果数据控件处于插入模式,则动态数据呈现字段模板 Boolean_Insert.ascx,该模板使用户能够插入布尔数据类型。
如果数据模型中的数据字段有关联的 UIHint 属性(即如果指定了自定义字段模板),则动态数据基于 UIHint 名称查找控件。例如,如果 UIHint 属性指定 MyTemplate,则动态数据查找名为 MyTemplate.ascx、MyTemplate_Edit.ascx(如果控件处于编辑模式)或 MyTemplate_Insert.ascx(如果控件处于插入模式)的字段模板。如果找不到这样的控件,则动态数据默认使用默认字段模板。
查找规则
动态数据通过确定字段模板的模式来开始查找。对于每个模式,动态数据都应用一组查找规则。
显示模式查找
下面列出了动态数据用于在显示模式下呈现字段模板的查找规则:
如果存在 UIHint(即自定义字段模板)元数据,则动态数据基于用户控件名称以及在 UIHint 和 DataTypeAttribute 属性中定义的 DataTypeAttribute 来查找控件。默认情况下,动态数据并非显示所有数据类型。例如,默认情况下不呈现 Byte[] 数据类型,如二进制、时间戳、图像类型。有关默认情况下动态数据显示的数据类型的更多信息,请参见 ASP.NET 动态数据默认字段模板。有关如何显示自定义数据类型的信息,请参见 DataTypeAttribute。
动态数据根据数据库中的列确定数据类型,然后基于该数据类型查找控件。按以下顺序确定和使用数据类型名称:
查找完整的数据类型名称,例如 System.Int32。
如果找不到完整的类型名称,则动态数据查找简单的数据类型名称,例如 int32。
如果找不到简单的数据类型名称,则查找在数据表中定义的特殊情况。例如,如果找不到简单的数据类型,如 Int32,则动态数据查找在数据表中定义的特殊情况 Integer。如果找不到简单的数据类型 String,则查找 String 的特殊情况 Text。
如果找不到特殊情况并且存在回退数据类型,则查找回退数据类型。动态数据使用回退数据类型从头执行查找。
如果回退数据类型不存在,则动态数据不显示任何数据。
如果字段是外键字段,则动态数据呈现 ForeignKey.ascx(用于多对一关系的默认字段模板)或 Children.ascx(用于一对多关系的默认字段)。
如果找不到字段模板控件,则动态数据将显示一条错误消息,指出找不到字段模板,将不显示任何数据。
编辑模式查找
编辑模式查找规则与显示模式规则相同,但有以下例外。如果字段模板处于编辑模式,则动态数据查找“_Edit”字段模板(例如 MyTemplate_Edit),并应用规则;否则,默认为显示(只读)模式。
插入模式查找
编辑模式查找规则与显示模式规则相同,但有以下例外。如果字段模板处于插入模式,则动态数据查找 _Insert 字段模板(例如 MyTemplate_Insert),并应用规则;否则,查找 _Edit 字段模板。
说明: |
---|
默认情况下不提供“_Insert.ascx”用户控件。 |
回退数据类型 |
数据类型 |
---|---|
十进制 |
浮点、双精度。 |
Int |
Int16、byte、Long。 |
字符串 |
Char、Int、Decimal、GUID、DateTime、DateTimeOffset、TimeSpan。 |
类参考
类 |
说明 |
---|---|
所有 FieldTemplateUser 控件的基类。 |