欢迎您来到中国万网客户服务中心!
客服导航
如果您在使用我们的产品中遇到问题,建议您首先在“常见问题”中查询解决方法;
如果没有找到该问题的解决方法,您可以在“问题搜索”中进行搜索;
如果搜索后没有找到满意答案,您可以“在线提问”,我们会在1个工作日内给您答复。
您现在的位置: 中国万网客服中心 >> 常见问题 >> 软件常见问题 >> ASP.NET程序模板 >> 文章正文

Web 窗体用户控件

作者:客服中心    文章来源:本站原创    点击数:    更新时间:2006-2-24



用户控件介绍

除了 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" 属性):


下面的示例显示导入到另一 Web 窗体页中的用户控件。注意,本例中的用户控件只是一个简单的静态文件。

 
C# Pagelet1.aspx

[查看源代码]


公开用户控件属性

当 Web 窗体页被视为控件时,该 Web 窗体的公共字段和方法也被提升为此控件的公共属性(即标记属性)和方法。下面的示例显示前一用户控件示例的扩展,添加了两个公共 String 字段。注意,这些字段可以在包含页中以声明方式或编程方式设置。

 
C# Pagelet2.aspx

[查看源代码]

除了将公共字段提升为控件属性外,还可以使用属性语法。属性语法具有能够在设置或检索属性时执行代码的优点。下面的示例说明一个 Address 用户控件,该控件在内部包装了 TextBox 控件的文本属性。这样做的优点是控件可以无偿继承 TextBox 控件的自动状态管理功能。

注意,在包含 Web 窗体的页上有两个 Address 用户控件,它们分别将 Caption 属性设置为“Billing Address”和“Shipping Address”。用户控件的真正威力在于这种可重用性。

 
C# Pagelet3.aspx

[查看源代码]

另一个有用的用户控件是用于收集用户名和密码的 Login 控件。

 
C# Pagelet4.aspx

[查看源代码]

在该示例中,窗体验证控件被添加到 Login 用户控件。

 
C# Pagelet5.aspx

[查看源代码]


在用户控件中封装事件

用户控件参与请求的整个执行生存期,方式与普通的服务器控件类似。这意味着用户控件可以处理自己的事件,并封装来自包含 Web 窗体页的一些页逻辑。下面的示例说明一个在内部处理自己的回发的产品清单用户控件。注意,用户控件本身不具有包装它的

控件。由于一页上只能有一个窗体控件(ASP.NET 不允许嵌套的服务器窗体),因此需要包含 Web 窗体页负责定义该控件。

 
C# Pagelet6.aspx

[查看源代码]


以编程方式创建用户控件

正如可以编程方式创建普通的服务器控件一样,也可以这样创建用户控件。页的 LoadControl 方法用于加载用户控件,并传递用户控件源文件的虚拟路径:

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

用户控件的类型由 Control 指令上的 ClassName 属性决定。例如,以文件名“pagelet7.ascx”保存的用户控件被分配强类型“Pagelet7CS”,如下所示:

<%@ Control ClassName="Pagelet7CS" %>

由于 LoadControl 方法返回 System.Web.UI.Control 类型,因此必须将其转换为适当的强类型以便设置控件的各属性。最后,用户控件被添加到基页的 ControlCollection

 
C# Pagelet7.aspx

[查看源代码]

重要说明 只有当为用户控件包括了 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 窗体页使用(即使没有实际声明的用户控件标记)。

返回上一页
中国万网旗下网站:中国万网 买麦网
Copyright © 2007 中国万网 版权所有
推荐使用1024×768分辨率浏览,并关闭窗口弹出阻止程序