Version 3.0
ASP.NET 中的自定义控件
第九章
2
回顾
? Web 服务概念
? WSDL
? 代理类不包含任何应用程序逻辑
? UDDI
? SOAP
3
目标
? 用户控件
? 自定义控件属性
? 自定义控件方法
? 自定义控件事件
? 从头开始创建自定义控件
? 扩展现有控件
? 复合控件
4
页面重用的方式
? 使用代码包含的方式实现页面重用
– 用户不能定制重用的代码
– 不能很好的保护开发者的代码
? ASP.NET中页面重用的方式
– 用户控件
– 自定义控件
5
用户控件概念
? 一个 Web 用户控件与一个完整的 Web 窗体
页相似,它们都包含:
– 一个用户界面页
– 一个代码隐藏文件
? 用户控件在以下方面与,aspx 文件不同:
– 扩展名必须为,ascx。
– 用户控件中不包含 <HTML>,<BODY> 和 <FORM>
元素
6
用户控件创建
? 步骤
– 创建一个 Web 项目
– 在“项目”菜单中单击“添加 Web 用户控件”
– 将文本和控件添加到设计图面
– 希望能够以编程方式访问的所有控件都必须是
Web 窗体服务器控件或 HTML 服务器控件
– 使用 Web 窗体设计器设置属性并创建控件所需
的任何代码
实例
7
将 aspx页面修改为用户控件
? 去除 <html>,<body> 和 <form> 元素
? 将 Web 窗体页中 ASP.NET 指令类型从 @
Page 更改为 @ Control
? 更改指令的 Codebehind 属性引用以反
映,aspx 扩展名将更改为,ascx
? 将基类从 System.Web.UI.Page 更改为
System.Web.UI.UserControl
8
用户控件的使用
? <%@ Register TagPrefix="uc1" TagName="menu"
Src="menu.ascx" %>
属性 说明
TagPrefix 确定用户控件的唯一命名空间,
它将是标记中控件名称的前缀
TagName 为用户控件的名称
Src 用户控件的虚拟路径,例如
,UserControl1.ascx”
9
创建和使用用户控件演示
10
Web自定义控件的概念
? Web 自定义控件是在服务器上运行的编译组
件
? Web 自定义控件将用户界面和其他相关功能
封装在可复用包中
? Web 自定义控件可以包含标准 ASP.NET 服务
器控件的所有设计时功能
11
用户控件和自定义控件的比较
主要区别在于设计时的易创建性与易用性
Web用户控件 Web自定义控件
易于创建 难于创建
为使用可视化设计工具的使
用者提供有限的支持
为使用者提供完全的可视化
设计工具支持
每个应用程序中需要控件的
一个单独副本
仅在全局程序集缓存中需要
控件的单个副本
不能添加到 Visual Studio 中的
工具箱
可以添加到 Visual Studio 中的
工具箱
适用于静态布局 适用于动态布局
12
从头开始创建自定义控件
? 如果现有的 Web 服务器控件(或其组合)
都不符合要求,则可以通过从基本控件类进
行派生来创建一个自定义控件
? 基本控件类提供 Web 服务器控件的所有基
本功能,因此可以将注意力集中在所需功能
的编程上
13
为自定义控件添加属性
? 自定义控件应该定义属性而不是公共字段
– 设计器在属性浏览器中显示属性而不显示公共
字段
– 属性实现了数据的封装
? 属性的定义
– 数据成员的定义
– get和 set访问器
实例
14
为自定义控件添加事件
? 在自定义控件中引发事件和在类中引发事件
类似
? 引发事件步骤
– 定义事件委托
– 声明事件
– 触发事件
实例
15
从头开始创建自定义控件演示
16
扩展现有控件功能
? 如果某一现有的服务器控件基本上符合要求
但缺少一些必需的功能,则可以通过从该控
件进行派生并重写其属性、方法和事件来自
定义该控件
17
扩展现有控件功能演示
18
创建复合控件
? 可以编译一个控件,使其组合两个或更多个
现有控件的功能
– 例如,如果需要一个控件来封装一个按钮和一
个文本框,则可以通过将现有控件编译在一起
来创建该控件
? 复合控件派生自 UserControl类
19
创建复合控件演示
20
ASP.NET页面设计
? ASP.NET页面设计元素:
– HTML服务器控件
– Web服务器控件
– Web验证控件
– 用户控件
– 自定义控件
? 页面设计建议
– 将功能相同的页面元素组合成用户控件
– 使用用户控件构建 ASP.NET页面
21
总结
? 用户控件
? 自定义控件
– 自定义控件属性
– 自定义控件事件
? 创建自定义控件的方法
– 从头开始创建自定义控件
– 扩展现有控件
– 复合控件
ASP.NET 中的自定义控件
第九章
2
回顾
? Web 服务概念
? WSDL
? 代理类不包含任何应用程序逻辑
? UDDI
? SOAP
3
目标
? 用户控件
? 自定义控件属性
? 自定义控件方法
? 自定义控件事件
? 从头开始创建自定义控件
? 扩展现有控件
? 复合控件
4
页面重用的方式
? 使用代码包含的方式实现页面重用
– 用户不能定制重用的代码
– 不能很好的保护开发者的代码
? ASP.NET中页面重用的方式
– 用户控件
– 自定义控件
5
用户控件概念
? 一个 Web 用户控件与一个完整的 Web 窗体
页相似,它们都包含:
– 一个用户界面页
– 一个代码隐藏文件
? 用户控件在以下方面与,aspx 文件不同:
– 扩展名必须为,ascx。
– 用户控件中不包含 <HTML>,<BODY> 和 <FORM>
元素
6
用户控件创建
? 步骤
– 创建一个 Web 项目
– 在“项目”菜单中单击“添加 Web 用户控件”
– 将文本和控件添加到设计图面
– 希望能够以编程方式访问的所有控件都必须是
Web 窗体服务器控件或 HTML 服务器控件
– 使用 Web 窗体设计器设置属性并创建控件所需
的任何代码
实例
7
将 aspx页面修改为用户控件
? 去除 <html>,<body> 和 <form> 元素
? 将 Web 窗体页中 ASP.NET 指令类型从 @
Page 更改为 @ Control
? 更改指令的 Codebehind 属性引用以反
映,aspx 扩展名将更改为,ascx
? 将基类从 System.Web.UI.Page 更改为
System.Web.UI.UserControl
8
用户控件的使用
? <%@ Register TagPrefix="uc1" TagName="menu"
Src="menu.ascx" %>
属性 说明
TagPrefix 确定用户控件的唯一命名空间,
它将是标记中控件名称的前缀
TagName 为用户控件的名称
Src 用户控件的虚拟路径,例如
,UserControl1.ascx”
9
创建和使用用户控件演示
10
Web自定义控件的概念
? Web 自定义控件是在服务器上运行的编译组
件
? Web 自定义控件将用户界面和其他相关功能
封装在可复用包中
? Web 自定义控件可以包含标准 ASP.NET 服务
器控件的所有设计时功能
11
用户控件和自定义控件的比较
主要区别在于设计时的易创建性与易用性
Web用户控件 Web自定义控件
易于创建 难于创建
为使用可视化设计工具的使
用者提供有限的支持
为使用者提供完全的可视化
设计工具支持
每个应用程序中需要控件的
一个单独副本
仅在全局程序集缓存中需要
控件的单个副本
不能添加到 Visual Studio 中的
工具箱
可以添加到 Visual Studio 中的
工具箱
适用于静态布局 适用于动态布局
12
从头开始创建自定义控件
? 如果现有的 Web 服务器控件(或其组合)
都不符合要求,则可以通过从基本控件类进
行派生来创建一个自定义控件
? 基本控件类提供 Web 服务器控件的所有基
本功能,因此可以将注意力集中在所需功能
的编程上
13
为自定义控件添加属性
? 自定义控件应该定义属性而不是公共字段
– 设计器在属性浏览器中显示属性而不显示公共
字段
– 属性实现了数据的封装
? 属性的定义
– 数据成员的定义
– get和 set访问器
实例
14
为自定义控件添加事件
? 在自定义控件中引发事件和在类中引发事件
类似
? 引发事件步骤
– 定义事件委托
– 声明事件
– 触发事件
实例
15
从头开始创建自定义控件演示
16
扩展现有控件功能
? 如果某一现有的服务器控件基本上符合要求
但缺少一些必需的功能,则可以通过从该控
件进行派生并重写其属性、方法和事件来自
定义该控件
17
扩展现有控件功能演示
18
创建复合控件
? 可以编译一个控件,使其组合两个或更多个
现有控件的功能
– 例如,如果需要一个控件来封装一个按钮和一
个文本框,则可以通过将现有控件编译在一起
来创建该控件
? 复合控件派生自 UserControl类
19
创建复合控件演示
20
ASP.NET页面设计
? ASP.NET页面设计元素:
– HTML服务器控件
– Web服务器控件
– Web验证控件
– 用户控件
– 自定义控件
? 页面设计建议
– 将功能相同的页面元素组合成用户控件
– 使用用户控件构建 ASP.NET页面
21
总结
? 用户控件
? 自定义控件
– 自定义控件属性
– 自定义控件事件
? 创建自定义控件的方法
– 从头开始创建自定义控件
– 扩展现有控件
– 复合控件