ASP.NET复合控件与CompositeControl类

用于解决设计时问题的 CompositeControl

随 ASP.NET 2.0 一同提供了一个名为 CompositeControl 的基类。因此,新的非数据绑定复合控件应该从该类派生而不是从 WebControl 派生。在开发控件方面,CompositeControl 的用法变动不大。您仍然需要替换 CreateChildControls 并按先前所述方式编码。那么 CompositeControl 的作用是什么?让我们先从其原型着手:

 
 
 
 
  1. public class CompositeControl :WebControl, 
  2. INamingContainer, 
  3. ICompositeControlDesignerAccessor

使用该类就无需再用 INamingContainer 装饰控件,但这实际上并不是很重要,因为接口只是一个标记并且不包含任何方法。更为重要的是,该类实现了一个名为 ICompositeControlDesignerAccessor 的全新接口。

 
 
 
 
  1. public interface ICompositeControlDesignerAccessor
  2. {
  3. void RecreateChildControls();
  4. }

此接口由复合控件的标准设计器用于在设计时重建控件树。以下是 CompositeControl 中方法的默认实现过程。

 
 
 
 
  1. void ICompositeControlDesignerAccessor.RecreateChildControls()
  2. {
  3. base.ChildControlsCreated = false;
  4. EnsureChildControls();
  5. }

简言之,如果您从 CompositeControl 派生复合控件,就不会遇到设计时的故障,而且无需采用技巧和妙计就可以使控件在运行时和设计时都能正常运行。

要充分理解此接口的重要性,可试以寄存某 LabelTextBox 复合控件的示例页为例,并将其转换为设计模式。控件在运行时工作正常,但在设计时却不可见。

图 5:只有复合控件从 CompositeControl 派生才对它们进行特殊的设计时处理

如果只是用 CompositeControl 替换 WebControl,则控件在运行时仍然保持正常工作,而在设计时也会运行良好。

图 6:在设计时运行良好的复合控件

分享题目:ASP.NET复合控件与CompositeControl类
分享网址:http://www.shufengxianlan.com/qtweb/news18/468068.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联