ASP.NET 动态数据基础结构

更新:2007 年 11 月

本主题介绍 ASP.NET 动态数据网站的布局,还包括有关默认情况下创建的文件夹和文件的信息。

可以在 Visual Studio 2008 中使用**“动态数据网站”**模板创建 ASP.NET 动态数据网站。此模板生成动态数据在创建用于处理数据的 UI 时使用的用户控件、网页模板以及 ASP.NET Web 文件。

数据上下文类

动态数据 Web 应用程序需要一个 MetaModel 对象和一个注册的数据上下文。数据上下文可以是 LINQ to SQL 类(System.Data.Linq.DataContext 类的一个实例),也可以是 ADO.NET Entity Framework 类。数据上下文类应位于应用程序根目录下的 App_Code 文件夹中。有关更多信息,请参见 ASP.NET 动态数据模型概述

文件夹和文件

下表介绍在 ASP.NET 动态数据网站的根目录级别创建的文件和文件夹。

文件或文件夹

说明

Dynamic Data

包含自定义控件以及用于显示数据的页面的文件夹。有关 Dynamic Data 文件夹的子文件夹的更多信息,请参见本主题后面的 DynamicData 文件夹结构。

Default.aspx

一个 ASP.NET 页,显示 MetaModel 实例中注册的表和视图。每个表名均呈现为一个显示所选表内容的 HyperLink 控件。

Global.asax

包含用于注册 MetaModel 类的实例并向 RouteCollection 对象添加路由的方法。有关更多信息,请参见本主题后面的网站配置。

Site.css

一个供动态数据网页模板和控件使用的级联样式表。

Site.master

站点的母版页。Default.aspx 和动态数据网页模板使用母版页。

Web.config

站点的配置文件。有关更多信息,请参见本主题后面的网站配置。

网站配置

默认情况下,动态数据网站包含 ASP.NET 网站中的一些典型文件。不过,这些文件包含特定于动态数据的信息或代码。本节提供有关动态数据所使用的文件的信息。

Global.asax 文件

在动态数据网站中,Global.asax 文件包含当 Web 应用程序启动时引发的 Application_Start 事件的处理程序。在此处理程序中,调用 RegisterRoutes 方法。RegisterRoutes 方法包含一个 MetaModel 实例以及一个对 RegisterContext 的被注释掉的调用。若要启用动态数据操作,必须启用 RegisterContext 方法,并传递给它一个有效的数据上下文,例如 DataContext 实例或 ADO.NET Entity Framework 上下文。

默认情况下,动态数据网站中的 Global.asax 文件调用 Add(Type) 方法,以便针对每个操作为 List.aspx、Details.aspx、Edit.aspx 和 Insert.aspx 页添加路由。

ListDetails.aspx 网页模板

网页模板是一个 .aspx 文件,其中包括动态数据创建用来显示和编辑数据的 UI 时可以使用的控件。Global.asax 文件中定义的路由确定动态数据使用哪些网页模板来执行 List、Details、Edit 以及 Insert 操作。有关更多信息,请参见 ASP.NET 动态数据基架和网页模板概述

通过在 Global.asax 文件中添加和移除路由定义,可以更改网页模板的路由。(Global.asax 文件中包括预定义的备用路由,但是这些路由都被注释掉了。)有关更多信息,请参见 Global.asax 文件中的注释。

若要使用动态数据使所有的表均可查看,应将 ContextConfiguration 对象的 ScaffoldAllTables 属性设置为 true。或者,也可以将表示要显示的表的分部类中的 ScaffoldTableAttribute 属性设置为 true。通过 ScaffoldTableAttribute 属性,可以使用动态数据有选择地显示表。

Site.master 文件

Site.master 文件是动态数据网站的母版页。它供所有动态数据网页模板使用。Site.master 文件包含一个 System.Web.UI.ScriptManager 控件,其 EnablePartialRendering 属性设置为 true。有关更多信息,请参见 ASP.NET 母版页概述

  • 注意   EnablePartialRendering 属性设置为 true 时,数据库服务器引发的异常将导致在浏览器中发生运行时错误。例如,如果尝试更新的行中具有在数据库中定义的列约束,且更新数据违反了该约束,则浏览器将显示运行时错误。如果 EnablePartialRendering 属性设置为 false,则浏览器不会显示详细的异常消息。不过,浏览器会显示 HTTP 500 错误,指示在服务器处理过程中出现了问题。有关更多信息,请参见添加 AJAX 和客户端功能

Web.config 文件

Visual Studio**“动态数据网站”**模板会生成一个 Web.config 文件,其中除了包含用于所有 ASP.NET 网站的那些元素外,还包含特定于动态数据的元素。在 assemblies 节中,添加了以下 DLL:

  • System.Web.Abstractions

  • System.Web.Routing

  • System.ComponentModel.DataAnnotations

  • System.Web.DynamicData

  • System.Data.Linq

针对 System.Web.DynamicData 命名空间和程序集注册了标记前缀“asp:”。

System.Web.DynamicData 程序集中的以下控件供 FieldTemplates 文件夹中的控件使用。

URL 路由模块 UrlRoutingModule 添加到 httpModules 元素和 system.webServer 节中。

DynamicData 文件夹结构

下表介绍了 DynamicData 文件夹中的子文件夹。

文件或文件夹

说明

Content

默认情况下,包含 Images 文件夹和两个控件(GridViewPager.ascx 和 FilterUserControl.ascx)。Images 文件夹包含用作页导航控件的图标的图形文件。FilterUserControl.ascx 是一个用于筛选外键列的 ASP.NET 用户控件。有关更多信息,请参见本文档中的动态数据 Web 服务器控件。

CustomPages

自定义网页模板的容器文件夹。自定义网页模板用于覆盖在 DynamicData\PageTemplates 中定义的网页模板。例如,如果数据上下文包含名为 Products 的表,则可以创建一个 DynamicData\CustomPages\Products 文件夹并在该新文件中添加用于显示 Products 数据的 .aspx 页。一种简单的开始方法是将 DynamicData\PageTemplates 文件夹中的页复制到新的 DynamicData\CustomPages\Products 中,然后修改模板。有关自定义网页模板的更多信息,请参见如何:使用自定义网页模板自定义单个表的布局

FieldTemplates

包含映射到数据模型中的数据类型的动态数据用户控件。有关更多信息,请参见 ASP.NET 动态数据字段模板概述ASP.NET 动态数据字段模板概述

PageTemplates

生成用于查看和编辑数据的 UI 的网页模板的容器文件夹。有关更多信息,请参见 ASP.NET 动态数据基架和网页模板概述

GridViewPager 控件

GridViewPager.ascx 文件是一个派生自 WebControl 的用户控件。当一个表有多页数据时,该文件用于增强分页功能。GridViewPager 用户控件用在 List.aspx 和 ListDetails.aspx 网页模板中。

FilterUserControl 控件

FilterUserControl.ascx 文件是一个用于筛选外键和布尔值列的 ASP.NET 用户控件。FilterUserControl 控件用在 List.aspx 和 ListDetails.aspx 网页模板中。对于表中的每个外键和每个布尔值列,它都要初始化一次。

例如,在使用 AdventureWorksLT 数据库的动态数据网站中,可以请求一个显示 Product 表中数据的页。Product 表包含引用 ProductCategory 表的 ProductCategoryID 外键列。动态数据推断出 ProductCategoryID 外键对应于 ProductCategory 表中的 Name 字段。然后,它用 ProductCategory 表中的 Name 字段替换 ProductCategoryID 字段。

在显示 AdventureWorksLT 数据库中的 Product 表时,将通过使用 ProductCategoryID 字段的推断名称来使用 FilterUserControl 为 ProductCategoryID 外键创建 DropDownList 控件。可以选择产品类别以便仅显示表中包含所选产品类别的行。例如,如果选择 Mountain Bikes,则仅显示产品类别为 Mountain Bikes 的那些行。

同时还会为表中的每个布尔值列添加一个 FilterUserControl。对于布尔值列,可以选择所有字段,也可以仅选择那些标记为 True 或 False 的字段。

FilterUserControl 控件的限制

对于在引用的表中具有相对较少的行的布尔值列和外键列,FilterUserControl 控件最有用。

请参见

概念

ASP.NET 动态数据概述

ASP.NET 动态数据模型概述

ASP.NET 动态数据基架和网页模板概述

其他资源

LINQ to SQL

ADO.NET Entity Framework