ASP.NET 2.0服务器控件之复合控件概述
据绑定或需要传送事件到子控件时,这是非常重要的。ICompositeControlDesignerAccessor接口使复合控件设计器可以在设计时重新创建其关联控件的子控件。该接口包含一个需要实现的方法RecreateChildControls。该方法使复合控件的设计器可以在设计时重新创建该控件的子控件。
另外,如果创建的是数据绑定复合控件,那么自定义控件类的基类应该是CompositeDataBoundControl。有关该类的具体内容,请读者查阅相关资料。 第二、必须重写Control基类的CreateChildControls方法,以便对子控件进行初始化、实例化,并将其添加到控件树中。CreateChildControls用于通知使用基于合成实现的服务器控件,创建它们包含的任何子控件,以便为回发或呈现做准备。重写该方法是实现复合控件的关键所在。这种类撰写的方法将通知.NET框架有关复合控件中包含哪些子控件,以及各个子控件在控件树中的位置和关系等内容。通过这种方法,复合控件将复用子控件提供的实现来进行呈现、事件处理、样式及其他功能。 在实现复合控件过程中,除了掌握CompositeControl基类和CreateChildControls方法之外,ASP.NET 2.0还提供了与复合控件相关的其他方法和属性,掌握这些成员对于开发复合控件也很重要。下面列举了这些常见方法和属性。 ·protected virtual void EnsureChildControls() 该方法用于确定服务器控件是否包含子控件。如果不包含,则创建子控件。该方法首先检查 ChildControlsCreated 属性的当前值。如果此值为假,则调用CreateChildControls方法。当需要确保已创建子控件时,将调用该方法。大多数情况下,自定义服务器控件的开发人员无需重写此方法。如果确实重写了此方法,请按与其默认行为相似的方式来使用。 ·public virtual Control FindControl(string) 该方法用于在当前的命名容器中搜索指定的服务器控件。 ·public virtual bool HasControls() 该方法用于确定服务器控件是否包含任何子控件。如果控件包含其他控件,则为true;否则为 false。由于该方法仅确定是否存在任何子控件,它可以通过允许您避免不必要的Controls.Count属性调用来改进性能。调用此属性要求实例化ControlCollection对象。如果没有子级,则创建该对象会浪费服务器资源。 ·protected virtual void DataBindChildren () 该方法是ASP.NET 2.0新增内容,其用于将数据源绑定到服务器控件的子控件。这为开发数据绑定类型的复合控件提供了便利。然而,需要注意的是,在服务器控件上调用此方法时,此方法不会将数据绑定到控件。若要绑定服务器控件及其所有子控件,请调用DataBind方法。 ·protected bool HasEvents () 这也是一个ASP.NET 2.0新增的方法,其用于返回一个值,该值指示是否为控件或任何子控件注册事件。如果注册事件,则为true;否则为false。 ·Controls属性 该属性的数据类型为ControlCollection,其用于获取ControlCollection对象,该对象表示 UI 层次结构中指定服务器控件的子控件。其属性值指定服务器控件的子控件集合。 ·NamingContainer属性 该属性的数据类型为Control,其用于获取对服务器控件的命名容器的引用,此引用创建唯一的命名空间,以区分具有相同Control.ID属性值的服务器控件。 ·ChildControlsCreated属性 该属性的数据类型为bool,其用于获取一个值,该值指示是否已创建服务器控件的子控件。如果已创建子控件则为true;否则为false。 典型应用 上文介绍了有关创建复合控件的一些基本知识,下面将通过一个典型应用加深读者对于复合控件实现方法的理解,其重点放在针对复合控件的呈现方法上。 多数控件呈现通过重写Render方法实现,然而,在复合控件中则大有不同。复合控件由多个子控件组合而 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |