复合控件想必大家都比较熟悉也都自己创建过,他跟用户控件有很多相似点,最大不同就是用户控件后缀为ascx,而复合控件编译后则为dll文件,还可以分发给大家使用。要想写一个复合控件就必须深刻理解他的生成过程,下面就以MSDN上的例子来说明一下.
}
    该控件具备两个公共属性(TextTitle)以及一个呈现引擎。这两个属性保存在视图状态中,并分别表示 TextBoxLabel 的内容。该控件对于 Render 方法没有替换方法,并通过CreateChildControls 替换方法来生成其自己的标记。CreateChildControls 的代码首先清除子控件的集合,然后为当前控件输出的构成控件生成控件树。CreateControlHierarchy 是一种特定于控件的方法,不要求必须标记为受保护和虚拟。但请注意,大多数自带复合控件(例如 DataGrid)只是通过一个类似的虚拟方法来暴露用于生成控件树的逻辑。
    控件第一次加载呈现过程,如图中所示,在页面第一次显示时,会在预呈现阶段调用
CreateChildControls:

自定义复合控件

    特别是,请求处理代码(在 Page 类中)在将 PreRender 事件引发至页面和每个子控件之前会直接调用 EnsureChildControls。换言之,如果控件树还未完全生成,则不会呈现任何控件

以下代码段例示了 EnsureChildControls(在 Control 基础上定义的另一种方法)的伪代码

}

    此方法可能会在页面和控件的生命周期内反复调用。为避免控件重复,ChildControlsCreated 属性被设为 true。如果此属性返回 true,则该方法会立即退出。

    当页面回发时,ChildControlsCreated 会在周期前期调用。如图所示,它在已发布数据处理阶段调用。

自定义复合控件

    注意第一次加载控件时是在预输出(PreRender)后调用CreateChildControls而回传的时候是在预加载(PreLoad)后调用CreateChildControls的。

原文地址:http://www.microsoft.com/china/msdn/library/webservices/asp.net/ASPNETContDev.mspx?mfr=true

相关文章:

  • 2021-09-30
  • 2021-11-11
  • 2022-12-23
  • 2021-05-31
  • 2022-12-23
  • 2022-01-18
  • 2021-10-14
猜你喜欢
  • 2022-12-23
  • 2021-10-25
  • 2022-03-06
  • 2021-12-04
  • 2021-07-05
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案