日期:2010-09-16 浏览次数:20470 次
在前面的系列文章中,笔者已经列举了几个实现自定义服务器控件的示例。通过这些示例,读者初步接触了有关创建服务器控件属性的内容。例如,使用私有变量、视图状态、控件状态等实现属性等等。虽然读者通过这些内容可以了解实现属性的一些基本知识,但是这还是不够的。从本节开始,将针对实现自定义服务器控件属性的问题展开讲解。本节重点介绍实现自定义服务器控件属性的一些基本概念和简单属性的基本实现方法等内容。
1. 控件属性基本概念
本小节介绍有关创建服务器控件属性的基本内容,具体内容包括:(1)属性类型和形式;(2)从Control和WebControl继承的属性;(3)与属性相关的设计时元数据attribute。
1) 属性类型和形式
通常情况下,服务器控件属性可以分为两种类型:简单属性和复杂属性。
简单属性是指属性值可以很容易转换为字符串表达式的属性,这种属性的值通常为Boolean、Byte、Char、Double、Enum、Int32、DateTime等简单数值类型,以及String类型和枚举类型。开发人员可以通过添加代码,将简单属性存储在ViewState字典中,以在回发间进行状态管理。如果一个属性的类型是本身具有属性(称为子属性)的类,则该属性就称为复杂属性。例如,WebControl类的Font属性的类型是本身具有属性(如Bold和Name)的FontInfo类。Bold和Name是WebControl的Font属性的子属性。ASP.NET页框架可通过使用带有连字符的语法(例如Font-Bold="true")在控件的开始标记上保存子属性,但如果在控件的标记(例如<font Bold="true">)中保存子属性,则子属性在页中的可读性更强。
在上文中谈到了属性的标记形式,即添加连字符的形式。实际上,不同的属性表现出不同的标记形式。为了加深对简单属性和复杂属性的认识,下面介绍一下有关属性的4种标记形式。
· 通用形式属性
这是一种最为常见的属性标记形式。这种形式的属性标记位于控件内部,与runat="server"一起定义。通常为以下形式:
其中属性ListItem就是典型的内部嵌套形式默认属性。
2) 从Control和WebControl继承的属性
如前面文章所述,如果需要开发没有UI的控件或者组合其他呈现它们自己的UI的控件,则从System.Web.UI.Control基类派生。为此,读者应该了解一些Control类的常见属性。如表1列举了Control基类常用属性,它们在开发服务器控件过程中经常被使用。
属性 | 数据类型 | 说明 |
Controls | ControlCollection | 获取 ControlCollection 对象,该对象表示 UI 层次结构中指定服务器控件的子控件 |
Adapter | ControlAdapter | 获取控件的浏览器特定适配器。(asp.net 2.0新增) |
AppRelativeTemplateSourceDirectory | string | 获取或设置包含该控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。(asp.net 2.0新增) |
EnableTheming | bool | 获取或设置一个值,该值指示是否对此控件应用主题。(asp.net 2.0新增) |
Page | Page | 获取对包含服务器控件的 Page 实例的引用。 |
Parent | Control | 控件属于其Controls集合的控件。(如果控件B是A.Controls的一个元素,则控件A是控件B的父级) |
EnableViewState | Bool | 指示控件在往返过程中是否维护其视图状态。如果父控件不维护其视图状态,则自动不维护其子控件的视图状态 |
TemplateControl | TemplateControl | 获取或设置对包含该控件的模板的引用。(asp.net 2.0新增) |
UniqueID | String | 页框架给控件分配的分层限定的唯一标识符 |
ClientID | String | 给控件分配的唯一标识符,该唯一标识符在客户端上呈现为HTML ID特性。ClientID与UniqueID是不同的,这是因为UniqueID可以包含冒号字符(:),而在HTML ID特性中该字符无效(并且不允许在客户端脚本的变量名中使用) |