惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

H
Help Net Security
博客园 - Franky
GbyAI
GbyAI
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
IT之家
IT之家
酷 壳 – CoolShell
酷 壳 – CoolShell
aimingoo的专栏
aimingoo的专栏
博客园_首页
MongoDB | Blog
MongoDB | Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
Scott Helme
Scott Helme
有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
C
CERT Recently Published Vulnerability Notes
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
F
Fortinet All Blogs
N
Netflix TechBlog - Medium
L
LangChain Blog
L
LINUX DO - 最新话题
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Hacker News: Front Page
MyScale Blog
MyScale Blog
P
Palo Alto Networks Blog
G
Google Developers Blog
Google DeepMind News
Google DeepMind News
AI
AI
T
Troy Hunt's Blog
Microsoft Azure Blog
Microsoft Azure Blog
阮一峰的网络日志
阮一峰的网络日志
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
罗磊的独立博客
S
Secure Thoughts
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
人人都是产品经理
人人都是产品经理
Blog — PlanetScale
Blog — PlanetScale
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 三生石上(FineUI控件)
S
Security @ Cisco Blogs
Cloudbric
Cloudbric
E
Exploit-DB.com RSS Feed
Attack and Defense Labs
Attack and Defense Labs

博客园 - wtiancai

VMware+Centos 7如何配置NAT模式上网 win 8.1 Your PC needs to be repaired修复过程 oracle 11g 如何创建、修改、删除list-list组合分区 高富帅屌丝买房差异大 看看都该买什么房 断开的远程连接过几分钟后会被注销的解决方法 福州二手房交易税费计算表 如何解决hp-unix中文二级编码乱码问题("喆")? - wtiancai - 博客园 风吹云动星不动 java调用oracle存储过程 HTML 表格特效整理 食物相克对照表 haha - wtiancai - 博客园 Oracle: 删除当前用户的所有对象(表、视图、触发器、存储过程、函数) Oracle SQL FAQ asp.net注册脚本块 爆笑幽默鬼故事!看完不会害怕! 子窗口刷新父窗口 Java程序员面试三十二问 自定义控件
Web 窗体用户控件
wtiancai · 2005-08-04 · via 博客园 - wtiancai

Posted on 2005-08-04 17:16  wtiancai  阅读(1613)  评论()    收藏  举报

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 窗体页使用(即使没有实际声明的用户控件标记)。