更新:2007 年 11 月
使用 ASP.NET 动态数据时,有两种常规方法可用来定义自定义。可以自定义字段模板使其具有字段特定行为,可以自定义网页模板使其具有表特定行为。
第一种方法是通过创建自定义字段模板来自定义表中的数据字段。然后创建一个其名称与表示表的实体类相匹配的分部类。在分部类中,可以使用 UIHintAttribute 属性来指定用于显示的自定义字段模板的名称。有关更多信息,请参见如何:在动态数据控件中自定义数据字段的外观和行为。
第二种方法是在 DynamicData\CustomPages 文件夹中创建一个子文件夹。该子文件夹的名称与希望自定义的表的数据上下文类中的表访问器相匹配。然后在文件夹中创建一个自定义网页模板。本主题演示如何使用第二种方法。
默认网页模板适用于所有的表,不使用架构特定信息。但是,为了在使用针对特定表的自定义网页模板时显示特定字段,您可以使用架构信息。
创建自定义网页模板
- 确保支架已启用。在 Global.asax 文件中,将 MetaModelRegisterContext() 方法中的 ContextConfiguration.ScaffoldAllTables 属性设置为 true。 - 下面的示例演示 RegisterRoutes 方法,该方法包括对启用支架和启用 List 操作的调用。 - Public Shared Sub RegisterRoutes(ByVal routes As RouteCollection) Dim model As New MetaModel model.RegisterContext(GetType(AdventureWorksLTDataContext), _ New ContextConfiguration() With {.ScaffoldAllTables = True}) routes.Add(New DynamicDataRoute("{table}/{action}.aspx") With { _ .Constraints = New RouteValueDictionary(New With _ {.Action = "List|Details|Edit|Insert"}), _ .Model = model}) End Sub- public static void RegisterRoutes(RouteCollection routes) { MetaModel model = new MetaModel(); model.RegisterContext(typeof(AdventureWorksLTDataContext), new ContextConfiguration() { ScaffoldAllTables = true }); routes.Add(new DynamicDataRoute("{table}/{action}.aspx") { Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }), Model = model }); }- 有关启用支架的更多信息,请参见演练:使用基架创建新的动态数据网站。 
- 在 DynamicData\CustomPages 文件夹中创建一个子文件夹。对于文件夹名称,请遵循以下准则: - 如果数据模型基于 LINQ to SQL,则使用数据上下文中的表名称作为文件夹名称。例如,要为 AdventureWorksLT 数据库中的 Product 表创建一个自定义页面,则创建一个名为 DynamicData\CustomPages\Products 的目录。 
- 如果数据模型基于 ADO.NET Entity Framework,则使用对象上下文中的表名称作为文件夹名称。例如,要为 AdventureWorksLT 数据库中的 Product 表创建一个自定义页面,则创建一个名为 DynamicData\CustomPages\Product 的目录。 
 
- 将一个现有的网页模板从 DynamicData\PageTemplates 文件夹复制到 DynamicData\CustomPages 下具有表访问器名称的子文件夹。 - 例如,将 DynamicData\PageTemplates\List.aspx 复制到 DynamicData\CustomPages\Products (对于 LINQ to SQL)或 DynamicData\CustomPages\Product (对于 Entity Framework)。 
- 将您的自定义项添加到上一步中复制的网页模板中。 - 下面的示例演示已更改的标头的标记。 - <h2> Custom Pages Demo <%= table.DisplayName%></h2>
- 若要测试自定义模板,请导航到浏览器中的表并确认该模板包括您做的更改。 - 例如,导航到 Product 表。您将看到“Custom Pages Demo Product”(LINQ to SQL)和“Custom Pages Demo Product”(Entity Framework)。