日期:2011-08-14  浏览次数:20504 次

适用于:
Microsoft ASP.NET 1.x
Microsoft ASP.NET 2.0

摘要:了解 ASP.NET 2.0 中的用于生成自定义数据绑定控件的工具是如何演变的。

 

本页内容
 为什么需要新的数据源模型
 ASP.NET 2.0 中的数据绑定控件
 分析要点
 数据绑定机制 
 列表控件
 HeadlineList 示例控件
 管理自定义集合
 关于复合控件的一点讨论
 小结

为什么需要新的数据源模型
数据绑定是开发人员在 ASP.NET 1.x 中发现的最令人愉快的意外功能之一。与 Active Server Pages 对数据访问的支持相比,数据绑定是简单性和有效性的非凡结合。然而,如果根据真正开发人员的需要进行衡量,则它还不够完美。其局限不在于总体功能方面,而在于开发人员必须编写大量代码来处理甚至非常简单和常见的操作(例如,分页、排序或删除)。为了弥补这一缺陷,ASP.NET 2.0 添加了一种新的数据源模型(请参阅我的文章:More Load, Less Code with the Data Enhancements of ASP.NET 2.0)。它包括很多不带 UI 的新控件,这些控件将数据绑定控件的可视部分和数据容器联系起来。开发人员需要在 ASP.NET 1.x 中编写的绝大部分代码经过适当的分解和创作,现在基本上都被嵌入到一系列新的控件中:数据源组件。

使用数据源组件有很多好处 — 首先,可以得到完全声明性的数据绑定模型。新模型减少了以内联方式插入到 ASPX 资源中或者分散在代码隐藏类中的松散代码。新的数据绑定体系结构强制开发人员遵守严格的规则。此外,它还从本质上改变了代码的质量。附加到事件的较长代码块通常会消失,而被只是插入到现有框架中的组件所取代。这些数据源组件派生自抽象类,实现了已知的接口,并且总体而言意味着更高级别的可重用性。

Nikhil Kothari 的有关控件开发的优秀著作 — Developing Microsoft ASP.NET Server Controls and Components — 帮助成千上万的开发人员生成自定义控件,并且说明了设计和实现的最佳做法。但是,一本书 — 无论它有多么伟大 — 都永远无法取代一个更好的系统框架。借助于 ASP.NET 2.0,您还获得了一个完全重新设计的类图 — 当您沿着类树从基础类向叶子类滚动时,它能够添加更具体的数据绑定功能。通过新的数据绑定控件层次结构,所有开发人员都可以更容易地选取正确的类来加以继承,以便生成他们自己的自定义数据绑定控件。

在本文中,您将提前了解 ASP.NET 2.0 数据绑定模型中的能够对自定义控件产生影响的更改。在此过程中,您将了解可用的新基类以及新的高质量自定义控件的新要求。

返回页首
ASP.NET 2.0 中的数据绑定控件
ASP.NET 2.0 数据源模型并未要求必须使用新的控件(例如,GridView 和 FormView);它仍然能够与旧样式的控件(例如,DataGrid 和 CheckBoxList)协同工作。这对于控件开发人员而言意味着什么呢?有两个截然不同类型的数据源需要处理 — 传统的基于 IEnumerable 的数据容器(例如,DataView 和集合)以及数据源控件(例如,SqlDataSource 和 ObjectDataSource)。最后,无论数据源是 ADO.NET 对象、自定义集合还是数据源组件,ASP.NET 2.0 数据绑定控件都必须能够将传入的任何数据规格化为可枚举的集合。

在 ASP.NET 1.x 中,文档在某种程度上领先于框架。文档正确地标识和讨论了三个类型的数据绑定控件 — 标准控件、列表控件和复合控件。任何只是提供 DataBind 方法和 DataSource 属性的非空实现的控件都属于第一个类别。列表控件是下列两者的有趣结合:高级布局属性(例如,RepeatColumns 和 RepeatLayout),以及为绑定的每个数据元素重复的固定的嵌入式项模板。最后,复合控件负责通过组合一个或多个现有控件来设计最终的用户界面。文档准确地阐述了与创建上述类型的控件相关的任何问题;然而,ASP.NET 框架却并未提供很多基类来简化开发人员的任务。图 1 显示了 ASP.NET 2.0 中的新的数据绑定控件层次结构。请注意显示为黄色的基类以及它们在整个类树中的分布。

 


图 1. ASP.NET 2.0 中的数据绑定控件的层次结构

对图 1 中呈现的基类进行一番观察是一件有趣的事情。它们在表 1 中列出并进行了详细说明。

说明

BaseDataBoundControl

数据绑定控件的根类。执行数据绑定并验证任何绑定数据。

DataBoundControl

包含用于与数据源控件和数据容器进行通信的逻辑。可以从该类继承以生成标准的数据绑定控件。

ListControl

列表控件的基类,提供 Items 集合和高级布局呈现功能。

CompositeDataBoundControl

实现复合控件所必需的典型代码,包括在进行回发之后根据视图状态还原控件树的代码。

HierarchicalDataBoundControl

基于树的分层控件的根类。

表 1. ASP.NET 2.0 中的基本数据绑定类