为了说明在用户控件中包装行为的事件的使用,我将演示怎样建立一个基于Web的、数据驱动的商业应用程序,该应用程序包含几个页面,可以返回一个项目列表、选择单个项目以及编辑那个项目的细节。无论你选择的实现方法是什么,一个页面的功能都应该可以在应用程序的其余部分重用。
用户控件怎样工作
用户控件是页面的一个片断,它有自己的HTML元素以及与那些元素交互的代码。你可以通过将用户控告件放到一个页面上然后使用代码将它们组合起来从而快速形成一个页面。在我的这个例子中,将页面划分成三个独立的部分是比较合理的:
组织页面的结构
我将使用示例Northwind数据库演示这个技术。在这个简单的应用程序中,我充许用户返回一个Employees表中的员工的列表。通过提供给用户一个包含由员工数据填充的DataGrid的页面,用户可以选择一个特定的员工,然后页面就会出现一个具有所选员工的详细信息的表单。这个表单有两个按钮:一个用于提交对数据库做的改动,另一个用于取消更新。
出于对篇幅的考虑,这里我没有给出Employees.aspx页面的Page_Load事件,它负责设置用户控件的初始状态。因为我想在显示员工的详细信息前选择一个员工,所以最开始EmployeeList.ascx控件是可见的,而EmployeeDetails.ascx则是不可见的。后者直到从EmployeeList.ascx控件的ASP.NET DataGrid控件中选择一个员工之后才可见。要显示初始视图,Page_Load事件处理程序设置EmployeeList.ascx控件的适当的属性,然后调用EmployeeList.GetEmployees。GetEmployees方法返回一个由数据库中的员工填充的DataSet,并将这个DataSet与一个叫做EmployeeGrid的DataGrid绑定。
我们希望得到的效果是让用户从列表中选择一个员工,然后将选择的员工的详细信息显示到同一个表单上。然而,用于编辑员工详细信息的表单是一个单独的用户控件,那么怎样才能实现这种效果呢?这时.NET事件功能性就派上用场了。