博学,审问,慎思,明辨,笃行

The World Of wtiancai
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Web 窗体用户控件

Posted on 2005-08-04 17:16  wtiancai  阅读(1595)  评论(0编辑  收藏  举报
1。用户控件介绍

除了 ASP.NET 提供的内置服务器控件外,还可以使用已学会的编写 Web 窗体页的相同编程技巧轻松地定义自己的控件。实际上,只需做少量的修改,几乎任何 Web 窗体页即可在其他页中作为服务器控件重用(注意,用户控件是 System.Web.UI.UserControl 类型,该类型直接从 System.Web.UI.Control 继承)。用作服务器控件的 Web 窗体页简称为用户控件。作为约定,使用 .ascx 扩展名指示这样的控件。这样可以确保用户控件的文件不能作为独立的 Web 窗体页执行(您会略微发现在用户控件和 Web 窗体页之间有很少但很重要的差异)。用户控件通过 Register 指令包括在 Web 窗体页中。

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

TagPrefix 确定用户控件的唯一命名空间(以便多个同名的用户控件可以相互区分)。TagName 是用户控件的唯一名称(可以选择任何名称)。Src 属性是用户控件的虚拟路径,例如“MyPagelet.ascx”或“/MyApp/Include/MyPagelet.ascx”。注册了用户控件后,可以像放置普通的服务器控件那样,将用户控件标记放置在 Web 窗体页中(包括 runat="server" 属性):
<Acme:Message runat="server"/>

2。公开用户控件属性

当 Web 窗体页被视为控件时,该 Web 窗体的公共字段和方法也被提升为此控件的公共属性(即标记属性)和方法。

除了将公共字段提升为控件属性外,还可以使用属性语法。属性语法具有能够在设置或检索属性时执行代码的优点。

3。在用户控件中封装事件

用户控件参与请求的整个执行生存期,方式与普通的服务器控件类似。这意味着用户控件可以处理自己的事件,并封装来自包含 Web 窗体页的一些页逻辑。注意,用户控件本身不具有包装它的 <form runat="server"> 控件。由于一页上只能有一个窗体控件(ASP.NET 不允许嵌套的服务器窗体),因此需要包含 Web 窗体页负责定义该控件。


4。以编程方式创建用户控件

正如可以编程方式创建普通的服务器控件一样,也可以这样创建用户控件。页的 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

重要说明 只有当为用户控件包括了 Register 指令时,用户控件的强类型才能由包含 Web 窗体页使用(即使没有实际声明的用户控件标记)。

小结
  1. 用户控件使开发人员能够使用编写 Web 窗体页的相同编程技巧轻松地定义自定义控件。
  2. 作为约定,用 .ascx 文件扩展名指示这样的控件。这样可以确保用户控件文件不能作为独立的 Web 窗体页执行。
  3. 用户控件通过 Register 指令包括在另一 Web 窗体页中,该指令指定 TagPrefixTagNameSrc location
  4. 注册了用户控件后,可以像普通的服务器控件那样将用户控件标记放置在 Web 窗体页中(包括 runat="server" 属性)。
  5. 在包含 Web 窗体页中将用户控件的公共字段、属性和方法提升为该控件的公共属性(标记属性)和方法。
  6. 用户控件参与每个请求的整个执行生存期,并且可以处理自己的事件,封装来自包含 Web 窗体页的一些页逻辑。
  7. 用户控件不应包含任何窗体控件,而应依靠其包含 Web 窗体页在必要时包括窗体控件。
  8. 可以使用 System.Web.UI.Page 类的 LoadControl 方法以编程方式创建用户控件。用户控件的类型由 ASP.NET 运行库决定,遵循约定文件名_扩展名
  9. 只有当为用户控件包括了 Register 指令时,用户控件的强类型才能由包含 Web 窗体页使用(即使没有实际声明的用户控件标记)。