ASP.NET立即上手教程 7<script language="javascript" type="text/javascript"> document.title="ASP.NET立即上手教程 7 - "+document.title </script>
Web Forms 用户控件
用户控件介绍
除了ASP.NET提供的内建的服务器控件外,你还可以使用已经掌握的制作WEB FORMS 页面的
技术,轻松的定义自己的控件。实际上,只需要稍微改动一下,几乎任何WEB FORMS页面都
可以作为服务器控件,在其他页面上重复使用。(注意用户控件的类型是System.Web.UI.U
serControl, 它直接从System.Web.UI.Control继承而来)。 Web Forms 页面被作为服务器
控件使用的时候,简称为用户控件。转变之后,通常使用.ascx扩展名来表明用户控件。这
就保证了用户控件文件不能作为一个单独的web form页面来执行(你可以明白,在用户控件
和web forms 页面之间,有一点,但是很重要的区别)。用户控件使用Register(注册)指
令包含在Web Forms 页面中:
TagPrefix 为用户控件确定了唯一的名称空间。(这样,具有相同名字的多个用户控件可以
互相区分). TagName 的值是用户控件的唯一名称(你可以使用任何名字)。 Src 属性是用
户控件的虚拟路径—例如"MyPagelet.ascx" 或者 "/MyApp/Include/MyPagelet.ascx"。
注册用户控件之后,你可以在web forms页面中放置用户控件标签,就像是用平常的服务器
控件一样(包含runat="server" 属性):
下面的例子展示了web forms页面引入用户控件的情况。本例中的用户控件仅仅是一个简单
的静态文件。
C# Pagelet1.aspx
[运行] | [源文件]
扩展用户控件的属性
当web forms页面作为用户控件处理的时候,web forms页面的公共字段和方法升级为公共
属性(即标签属性)和公共方法(标签的方法)。下面的例子将上一个例子中的用户控件进
行延伸,增加了两个公共 String字段。注意这两个字段既可以在包含页中直接声明,也可
以用程序来控制。
C# Pagelet2.aspx
[运行] | [源文件]
除了将公共字段升级为控件属性外,也可以使用属性语法。 使用属性语法胜过为了设定或
者取得属性值而执行代码。下面的例子示范了一个Address 用户控件,他绑定了TextBox
控件的text 属性。这样做的好处在于该控件“免费”继承了TextBox 控件的自动状态管理
。注意在包含web forms页面中有两个Address 用户控件,分别为"Billing Address" 和
"Shipping Address" 设置Caption 属性。用户控件的真正强大之处就是这种重复利用。
C# Pagelet3.aspx
[运行] | [源文件]
用户控件的另一个有用之处是 Login 控件,用来收集用户名和密码。
C# Pagelet4.aspx
[运行] | [源文件]
在这个例子中,服务器验证控件添加到了Login用户控件中
C# Pagelet5.aspx
[运行] | [源文件]
在用户控件中封装事件
如同普通的服务器控件一样,用户控件参与整个请求执行的生命周期。这就意味着,用户
控件能够操作自己的事件,从包含web forms页中封装某些页面逻辑。
下面的例子演示了一个产品列表用户控件,它在内部处理了自己的提交返回。注意用户控
件自身没有绑定
控件。因为只有一个表单控件出现在页面上(asp
.net不允许嵌套服务器表单),于是留给包含web forms 页面去定义他。
C# Pagelet6.aspx
[运行] | [源文件]
用程序创建用户控件
如同普通服务器控件可以用程序创建一样,用户控件也一样。页面的LoadControl方法用来
载入用户控件,同时将虚拟路径传递给用户控件的源文件所在。
Control c1 = LoadControl("pagelet7.ascx");
((Pagelet7CS)c1).Category = "business";
Page.Controls.Add(c1);
用户控件的类型是由Control 命令的ClassName 属性所决定。例如下面的例子,一个文件
名保存为"pagelet7.ascx"的用户控件被赋值为 "Pagelet7CS" 强类型:
因为LoadControl 方法返回的类型是System.Web.UI.Control, 所以为了设置用户控件的个
别属性,它必须抛出适当的强类型。最终,用户控件加入到基本页面的ControlCollectio
n 集合中。
C# Pagelet7.aspx
[运行] | [源文件]
重要提示 对于包含用户控件的web forms 页面,只有当Register 命令包含了用户控件(
即使没有用户控件标签被实际声明),用户控件的强类型才是可利用的。
本章小结
1. 用户控件允许开发者使用创建web forms页面所使用的程序设计技术,轻松的创建自定
义控件。
2. 作为与普通页面的区别,使用.ascx 文件扩展名来表明用户控件。这就保证了用户控件
不能像标准web forms页面那样执行。
3. 使用Register 命令,将用户控件包含在web forms页面中。Register 命令指定了TagP
refix, TagName, 和Src location。
4. 注册了用户控件之后,就可以像对待普通服务器控件那样,使用用户控件(包含runat
="server" 属性)。
5. 用户控件被包含在web forms 页面中以后,他的公共字段、属性和方法升级为控件的公
共属性(标签属性)和方法。
6. 用户控件参与每个客户端请求的整个生命周期,并且处理自身的事件,封装了部分包含
他的web forms页面的页面逻辑。
7. 用户控件不能包含任何form控件。如果需要的话,可以在包含他的web form页面中使用
form控件。
8. 用户控件可以用System.Web.UI.Page类的LoadControl方法用用程序来创建。用户控件
的类型由Control 命令的ClassName 属性所决定。
9. 对于包含用户控件的web forms 页面,只有当Register 命令包含了用户控件(即使没
有用户控件标签被实际声明),用户控件的强类型才是可利用的。
用户控件介绍
除了ASP.NET提供的内建的服务器控件外,你还可以使用已经掌握的制作WEB FORMS 页面的
技术,轻松的定义自己的控件。实际上,只需要稍微改动一下,几乎任何WEB FORMS页面都
可以作为服务器控件,在其他页面上重复使用。(注意用户控件的类型是System.Web.UI.U
serControl, 它直接从System.Web.UI.Control继承而来)。 Web Forms 页面被作为服务器
控件使用的时候,简称为用户控件。转变之后,通常使用.ascx扩展名来表明用户控件。这
就保证了用户控件文件不能作为一个单独的web form页面来执行(你可以明白,在用户控件
和web forms 页面之间,有一点,但是很重要的区别)。用户控件使用Register(注册)指
令包含在Web Forms 页面中:
TagPrefix 为用户控件确定了唯一的名称空间。(这样,具有相同名字的多个用户控件可以
互相区分). TagName 的值是用户控件的唯一名称(你可以使用任何名字)。 Src 属性是用
户控件的虚拟路径—例如"MyPagelet.ascx" 或者 "/MyApp/Include/MyPagelet.ascx"。
注册用户控件之后,你可以在web forms页面中放置用户控件标签,就像是用平常的服务器
控件一样(包含runat="server" 属性):
下面的例子展示了web forms页面引入用户控件的情况。本例中的用户控件仅仅是一个简单
的静态文件。
C# Pagelet1.aspx
[运行] | [源文件]
扩展用户控件的属性
当web forms页面作为用户控件处理的时候,web forms页面的公共字段和方法升级为公共
属性(即标签属性)和公共方法(标签的方法)。下面的例子将上一个例子中的用户控件进
行延伸,增加了两个公共 String字段。注意这两个字段既可以在包含页中直接声明,也可
以用程序来控制。
C# Pagelet2.aspx
[运行] | [源文件]
除了将公共字段升级为控件属性外,也可以使用属性语法。 使用属性语法胜过为了设定或
者取得属性值而执行代码。下面的例子示范了一个Address 用户控件,他绑定了TextBox
控件的text 属性。这样做的好处在于该控件“免费”继承了TextBox 控件的自动状态管理
。注意在包含web forms页面中有两个Address 用户控件,分别为"Billing Address" 和
"Shipping Address" 设置Caption 属性。用户控件的真正强大之处就是这种重复利用。
C# Pagelet3.aspx
[运行] | [源文件]
用户控件的另一个有用之处是 Login 控件,用来收集用户名和密码。
C# Pagelet4.aspx
[运行] | [源文件]
在这个例子中,服务器验证控件添加到了Login用户控件中
C# Pagelet5.aspx
[运行] | [源文件]
在用户控件中封装事件
如同普通的服务器控件一样,用户控件参与整个请求执行的生命周期。这就意味着,用户
控件能够操作自己的事件,从包含web forms页中封装某些页面逻辑。
下面的例子演示了一个产品列表用户控件,它在内部处理了自己的提交返回。注意用户控
件自身没有绑定
控件。因为只有一个表单控件出现在页面上(asp
.net不允许嵌套服务器表单),于是留给包含web forms 页面去定义他。
C# Pagelet6.aspx
[运行] | [源文件]
用程序创建用户控件
如同普通服务器控件可以用程序创建一样,用户控件也一样。页面的LoadControl方法用来
载入用户控件,同时将虚拟路径传递给用户控件的源文件所在。
Control c1 = LoadControl("pagelet7.ascx");
((Pagelet7CS)c1).Category = "business";
Page.Controls.Add(c1);
用户控件的类型是由Control 命令的ClassName 属性所决定。例如下面的例子,一个文件
名保存为"pagelet7.ascx"的用户控件被赋值为 "Pagelet7CS" 强类型:
因为LoadControl 方法返回的类型是System.Web.UI.Control, 所以为了设置用户控件的个
别属性,它必须抛出适当的强类型。最终,用户控件加入到基本页面的ControlCollectio
n 集合中。
C# Pagelet7.aspx
[运行] | [源文件]
重要提示 对于包含用户控件的web forms 页面,只有当Register 命令包含了用户控件(
即使没有用户控件标签被实际声明),用户控件的强类型才是可利用的。
本章小结
1. 用户控件允许开发者使用创建web forms页面所使用的程序设计技术,轻松的创建自定
义控件。
2. 作为与普通页面的区别,使用.ascx 文件扩展名来表明用户控件。这就保证了用户控件
不能像标准web forms页面那样执行。
3. 使用Register 命令,将用户控件包含在web forms页面中。Register 命令指定了TagP
refix, TagName, 和Src location。
4. 注册了用户控件之后,就可以像对待普通服务器控件那样,使用用户控件(包含runat
="server" 属性)。
5. 用户控件被包含在web forms 页面中以后,他的公共字段、属性和方法升级为控件的公
共属性(标签属性)和方法。
6. 用户控件参与每个客户端请求的整个生命周期,并且处理自身的事件,封装了部分包含
他的web forms页面的页面逻辑。
7. 用户控件不能包含任何form控件。如果需要的话,可以在包含他的web form页面中使用
form控件。
8. 用户控件可以用System.Web.UI.Page类的LoadControl方法用用程序来创建。用户控件
的类型由Control 命令的ClassName 属性所决定。
9. 对于包含用户控件的web forms 页面,只有当Register 命令包含了用户控件(即使没
有用户控件标签被实际声明),用户控件的强类型才是可利用的。