介绍
这是我关于ASP系列的另一篇小文章。NET控件,它的主要焦点是揭示控件如何相互关联,涉及哪些实体,以及它们在此任务中的主要角色是什么。
动机
理解每次处理页面请求和某人在他的浏览器中获得您的web表单时在我们的绳套下发生的小魔术,将帮助您避免许多问题,更快地调试它们,并生成更好的应用程序。
如果您是一个有经验的程序员,这些知识还可以帮助您编排复杂的解决方案,也许还可以逐步完成一些ASP。净的约束。
控件之间是如何关联的?
为了公开一个ASP。你需要把它放在一个页面中,事实上,在任何ASP。网络控制。为了参与页面生命周期,您需要以某种方式与页面相关。这种关系是通过父/子层次结构实现的。
页控件是此层次关系的根控件,它处理应该触发哪个管道(初始请求、回发请求或回调请求)。
如果需要,控件可以包含其他控件,并且所有这些子控件一起保存在通过控件属性公开的控件集合实例中。每个控件都知道它的父控件。
可以包含其他控件的控件也可以标记为其子控件的自动命名生成过程中的参与者。这个角色是通过实现INamingContainer接口来实现的,当这种情况发生时,该控件被称为NamingContainer。每个子控件都知道它的名称为container。
ControlCollection提供了一组通常用于收集管理的方法:
Add -将指定的控件对象添加到集合中。从父服务器控件的ControlCollection对象中移除指定的服务器控件。清除——从当前服务器控件的ControlCollection对象中移除所有控件。
一个控件只能附加到另一个控件并通过ControlCollection成为它的子控件。添加方法。每当从集合中添加或移除一个控件时,它的父控件和它的NamingContainer都会收到通知并作出反应。
当一个控件添加到另一个控件的子集合时,则为新的父控件。调用AddedControl方法,并执行以下步骤:
检查新添加的子控件是否有所有者,因此其使用是否仅限于该所有者控件。如果为真,则子控件不是有效控件,并抛出异常。检查新添加的子控件是否属于另一个控件的子集合,在这种情况下,该控件将从之前父控件的子集合中移除。这是确保有效的层次关系所必需的:控件只能属于单个控件集合。更新新添加子控件的页引用,以引用新的父页。更新新添加子控件的父引用以引用自身。如果新的父控件是NamingContainer,那么我们将更新新添加子控件的NamingContainer引用以引用它自己。如果没有指定新的子控件ID,那么将为新子控件的NamedControls集合自动生成一个新ID,并将NamingContainer标记为dirty,以确保创建并填充一个新的和新的集合。如果可能,将为新添加的子控件重新创建控件生命周期。
从父控件集合中移除控件时,父控件将被移除。调用RemovedControl方法,并采取以下步骤:
检查新添加的子控件是否有所有者,因此其使用是否仅限于该所有者控件。如果为真,则子控件不是有效控件,并抛出异常。子控件NamingContainer的NamedControls集合被标记为dirty,以确保创建并填充一个新的和新的集合(不包含已删除的控件)。子控件执行非加载递归而不进行处理。在AddedControl上设置的所有引用将被删除,该控件将从任何层次结构中释放。
本文转载于:http://www.diyabc.com/frontweb/news19147.html