当您开始使用 Microsoft .NET Framework 2.0 和 ASP.NET 时,您会发现新 的 Web 部件基础结构将一些非常强大的功能添加到了基础平台中。对于本文, 我假设您已经对 Web 部件的基本知识有所了解,例如,如何使用 WebPartManager 控件、Web 部件区域、编辑器、目录和持久性属性。
创建用于ASP.NET 2.0应用程序的Web部件
您可以用两种方法创建 Web 部件。第一种方法涉及创建一个自定义的 Web 部件类,该类从 System.Web.UI.WebControls.WebParts 命名空间中定义的 WebPart 类继承。使用该方法时,将自定义的 Web 部件类打包到一个程序集 DLL 中通常是有意义的,因为这样可以提供对重用、版本控制和 Visual Studio 2005 集成的更多控制。如果您对使用以前的 ASP.NET 版本生成自定义控件很熟 悉,则许多相同的技术适用于将自定义的 Web 部件生成到 DLL 程序集中。
用于创建 ASP.NET 2.0 Web 部件的第二种方法涉及使用用户控件。虽然该方 法不产生相同的重用和版本控制级别,但是它的确允许您使用 Visual Studio 窗体设计器来创建 Web 部件的用户界面部分。如果您想通过将用于用户输入、 验证和数据绑定的控件拖放到设计界面上来创建应用程序,则该方法适合于您。 当然,如果您已经花时间创建了一个您想用作 Web 部件的用户控件,它也是个 可以采用的好方法。
当创建一个专门设计为 Web 部件的用户控件时,建议您实现 IWebPart 接口 。这样,Web 部件后台的代码就可通过编程方式分配自己的几个内部 Web 部件 属性,如它的 Title 和 TitleIconUrl。
本文附带的代码示例使用一个名为 WebPartBase 的自定义基类,该基类从 UserControl 继承并实现 IwebPart。该基类的定义部署在 App_Code 目录中名 为 WebPartBase.vb 的源文件中。每当您使用用户控件创建一个新 Web 部件时 ,只需在该代码隐藏文件中更改该基类以利用该技术:
Partial Class WebParts_Customers
Inherits WebPartBase
Sub New()
Title = "Northwind Customer List"
TitleIconImageUrl = "~\img\Customers.gif"
End Sub
End Class
设计可连接的 Web 部件
使用 Web 部件连接,您可以使用户更轻松地形象化数据各项之间存在的关系 。例如,Web 部件连接可以建模一个主-从方案,其中显示客户列表的 Web 部件 连接到另一个显示当前所选客户详细信息的 Web 部件。图 1 的示例说明这种设 计可能生成的用户界面外观。
图 1
Web 部件连接还可用于建模一对多关系。例如,显示客户列表的 Web 部件可 以连接到另一个显示针对当前所选客户的所有定单的 Web 部件。
通常使用 Web 部件连接建模的另一个方案是表单查询。在这种方案中,一个 Web 部件提供一个用户界面,该用户界面允许用户选择查询数据(如数据库表) 时所用的搜索或筛选条件。然后,该 Web 部件连接到另一个显示查询结果的 Web 部件。Web 部件连接用于在运行查询前,将筛选条件从一个 Web 部件传递 到另一个 Web 部件。
Web 部件连接基于提供者和使用者的概念。提供者 Web 部件通过一个编程接 口为一个或多个使用者 Web 部件提供信息。提供者和使用者之间交换的信息可 以是简单的数据项(如数字或字符串),也可以是较特殊的内容(如对一个复杂 数组或自定义对象集合的引用)。
如果针对 Windows SharePoint Services 2.0 (WSS) 编写了 Web 部件,您 可能已经熟悉它用于连接 Web 部件的模型。在 WSS 中,Web 部件只能使用一组 预定义的接口对连接。这些接口对的示例包括 ICellProvider 和 ICellConsumer,以及 IRowProvider 和 IRowConsumer。
ASP.NET 2.0 中的 Web 部件连接模型比 WSS 中的旧式模型更容易、更灵活 ,因为您可以使用自己的自定义接口。这意味着您无需使用由 Microsoft 人员 创建的接口定义。而且,您无需对接口对进行任何操作,它们必须由提供者和使 用者实现。使用 ASP.NET 2.0,只有提供者需要实现一个接口。
要了解其工作方式,我们先在两个 Web 部件之间创建一个连接。对于我要在 本月专栏中提供的示例,我决定使用 Northwind 数据库,因为它有一个 Customers 表和一个 Orders 表。这使我能为您展示如何针对主-从和一对多关 系设计 Web 部件。有一点需要注意,如果使用 SQL Server 2005,则在产品安 装过程中并不安装该示例 Northwind 数据库。要安装它,您必须下载并运行 Microsoft Web 站点上可用的脚本。
现在,假设您要在一个显示客户列表的 Web 部件和一个显示当前所选客户的 详细信息的客户 Web 部件之间建立一个 Web 部件连接,如图 1所示。显示客户 列表的 Web 部件将扮演提供者的角色,而显示当前所选客户的详细信息的 Web 部件则作为使用者。在这种情况下,您希望提供者为使用者提供当前所选客户的 CustomerID 字段。
首先,创建一个名为 ICustomerIDProvider 的简单接口:
Public Interface ICustomerIDProvider
ReadOnly Property CustomerID() As String
End Interface