当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > ASP.NET立即上手教程(7)

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

ASP.NET立即上手教程(7)


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 45 ::
收藏到网摘: n/a

Web Forms 用户控件

用户控件介绍

除了ASP.NET提供的内建的服务器控件外,你还可以使用已经掌握的制作WEB FORMS 页面的技术,轻松的定义自己的控件。实际上,只需要稍微改动一下,几乎任何WEB FORMS页面都可以作为服务器控件,在其他页面上重复使用。(注意用户控件的类型是System.Web.UI.UserControl, 它直接从System.Web.UI.Control继承而来)。 Web Forms 页面被作为服务器控件使用的时候,简称为用户控件。转变之后,通常使用.ascx扩展名来表明用户控件。这就保证了用户控件文件不能作为一个单独的web form页面来执行(你可以明白,在用户控件和web forms 页面之间,有一点,但是很重要的区别)。用户控件使用Register(注册)指令包含在Web Forms 页面中:

<%@ Register TagPrefix="Acme" TagName="Message" Src="pagelet1.ascx" %>

TagPrefix 为用户控件确定了唯一的名称空间。(这样,具有相同名字的多个用户控件可以互相区分). TagName 的值是用户控件的唯一名称(你可以使用任何名字)。 Src 属性是用户控件的虚拟路径—例如"MyPagelet.ascx" 或者 "/MyApp/Include/MyPagelet.ascx"。 注册用户控件之后,你可以在web forms页面中放置用户控件标签,就像是用平常的服务器控件一样(包含runat="server" 属性):

<Acme:Message runat="server"/>

下面的例子展示了web forms页面引入用户控件的情况。本例中的用户控件仅仅是一个简单的静态文件。

扩展用户控件的属性

当web forms页面作为用户控件处理的时候,web forms页面的公共字段和方法升级为公共属性(即标签属性)和公共方法(标签的方法)。下面的例子将上一个例子中的用户控件进行延伸,增加了两个公共 String字段。注意这两个字段既可以在包含页中直接声明,也可以用程序来控制。

除了将公共字段升级为控件属性外,也可以使用属性语法。 使用属性语法胜过为了设定或者取得属性值而执行代码。下面的例子示范了一个Address 用户控件,他绑定了TextBox 控件的text 属性。这样做的好处在于该控件“免费”继承了TextBox 控件的自动状态管理。注意在包含web forms页面中有两个Address 用户控件,分别为"Billing Address" 和 "Shipping Address" 设置Caption 属性。用户控件的真正强大之处就是这种重复利用。

用户控件的另一个有用之处是 Login 控件,用来收集用户名和密码。

在这个例子中,服务器验证控件添加到了Login用户控件中

在用户控件中封装事件

如同普通的服务器控件一样,用户控件参与整个请求执行的生命周期。这就意味着,用户控件能够操作自己的事件,从包含web forms页中封装某些页面逻辑。

下面的例子演示了一个产品列表用户控件,它在内部处理了自己的提交返回。注意用户控件自身没有绑定<form runat="server">控件。因为只有一个表单控件出现在页面上(asp.net不允许嵌套服务器表单),于是留给包含web forms 页面去定义他。

用程序创建用户控件

如同普通服务器控件可以用程序创建一样,用户控件也一样。页面的LoadControl方法用来载入用户控件,同时将虚拟路径传递给用户控件的源文件所在。

Control c1 = LoadControl("pagelet7.ascx");
((Pagelet7CS)c1).Category = "business";
Page.Controls.Add(c1);

用户控件的类型是由Control 命令的ClassName 属性所决定。例如下面的例子,一个文件名保存为"pagelet7.ascx"的用户控件被赋值为"Pagelet7CS" 强类型:

<%@ Control ClassName="Pagelet7CS" %>

因为LoadControl 方法返回的类型是System.Web.UI.Control, 所以为了设置用户控件的个别属性,它必须抛出适当的强类型。最终,用户控件加入到基本页面的ControlCollection 集合中。

重要提示 对于包含用户控件的web forms 页面,只有当Register 命令包含了用户控件(即使没有用户控件标签被实际声明),用户控件的强类型才是可利用的。

本章小结

1、用户控件允许开发者使用创建web forms页面所使用的程序设计技术,轻松的创建自定义控件。

2、作为与普通页面的区别,使用.ascx 文件扩展名来表明用户控件。这就保证了用户控件不能像标准web forms页面那样执行。

3、使用Register 命令,将用户控件包含在web forms页面中。Register 命令指定了TagPrefix, 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 命令包含了用户控件(即使没有用户控件标签被实际声明),用户控件的强类型才是可利用的。