ASP.NET 动态数据让我们能够以少许的努力快速构建以数据为中心的 Web 应用程序。它通过解析数据模型架构中的类型信息填充模板页面,这完全不需要代码或仅需要极少量的代码。15 分钟的工作足以让人获得深刻的印象,而在创建这些基础的功能后,还可进行大量自定义。
了解 ASP.NET 动态数据程序的最佳起点是创建一个示例网站,只有这样你才能知道它的设置和运行是多么容易,以及有多少现成的功能可用。ASP.NET 动态数据网站的核心是数据库模型。可以使用 LINQ to SQL 或者实体框架来生成数据库模型。本文会使用 LINQ to SQL 。
创建动态数据网站
- 创建一个新的 ASP.NET 动态数据项目。在 Visual Studio 中新建 ASP.NET Dynamic Data Linq to SQL 网站
- 新增一个 LINQ to SQL 类,你会被提示将它放入 App_Code 目录中
- 将 Northwind 数据库中的 Customer、Order、Order_Detail、Product 表拖放到 Northwind.dbml 文件的设计器窗口
此时的 Visual Studio 的情况应类似于这样:
将这个数据模型注册到 ASP.NET 动态数据系统。打开 Global.aspx 文件,反注释 RegisterRoutes 方法中调用 DefaultModel.RegisterContext 的行,如下:
在这一行上执行 2 处修改,见红色:
DefaultModel.RegisterContext(typeof(
NorthwindDataContext
),
new ContextConfiguration() { ScaffoldAllTables = true });
修改类型是为了注册数据模型。修改 ScaffoldAllTables 属性的值是让 ASP.NET 动态数据系统暴露我们添加到 Web 应用程序数据模型的全部 4 张表(以后我们会做更严格的控制)。
检验动态数据网站
现在运行程序会看到如下的基架界面,ASP.NET 动态数据系统从数据模型中取得了这 4 张表并根据它们构建了页面结构,你可以看到 Default.aspx 页面上有每个表的链接:
单击 Customers 链接,可以看到一个包含了 Northwind.Customers 表前 10 条记录的页面:
ASP.NET 动态数据系统根据数据模型创建了表,你可以看到网页上的表格列和数据库表 Customers 的列相对应。
创建好的基架可以做很多有趣的事情:
- 页面的下方可以修改分页的记录数,也可以在页面间切换或跳转到指定的页
- 每行左端的 3 个按钮可以完成相应操作
- 最右侧,ASP.NET 动态数据系统识别出了 Customers 表和 Orders 表之间的外键关系,并未每个记录自动添加了导航的链接
单击其中任意一个链接,就会看到显示某个选中客户的全部订单的页面:
注意页面最右侧,ASP.NET 动态数据系统通过数据模型识别出 Orders 表有两个外键关系:
返回主页,单击 Orders 链接,注意这里有个 Customers 下拉列表框(怎么用,你懂的):
深入理解动态数据项目
通过生成数据模型并修改了一行代码,我们就创建了一个暴露数据库表的 Web 应用程序,并且以智能且实用的方式实现了它。我们得到了完整的 CRUD 支持并灵活的使用外键进行记录的导航,你不觉得这很酷吗?
现在,该看看项目自身并理解其中主要的部分了。ASP.NET 动态数据系统并不是你可能期望的那个代码生成功能。它其实是一个非常灵活且可配置的模板系统。下面我们就对项目进行一下剖析,看图:
- App_Code 目录包含程序代码,现在只有数据模型类。不过后续为了对网站进行自定义,我们将陆续添加一些代码
- DynamicData 目录中,展开 PageTemplates 目录,你会看到 5 个模板(它们都是用富数据控件构建的用户控件)。
- Filters 目录包含了用于过滤记录列表的控件
- FieldTemplates 目录用于显示不同数据字段的控件
- EntityTemplates 目录支持 ASP.NET 4 新增的名为实体模板的动态数据特性,是 DynamicData 控件用来格式化数据元素的标记
- CustomsPages 目录支持自定义 ASP.NET 动态数据网站的某种机制。你可以把自定义的模板放到这里以自定义数据显示的方式
- Content 目录包含呈现使用的静态元素以及用于翻阅记录列表的控件
- Global.aspx 在 ASP.NET 动态数据项目里非常非常的重要,它用于注册数据模型,还用于注册路由!