覆盖WebControl上的控件集合

时间:2009-04-16 15:44:14

标签: c# asp.net controls custom-server-controls

我试图覆盖来自WebControl的控件的Controls集合,这样当用户向webcontrol添加控件时,我可以在它之前和之后放置按钮,并将它放在自己的包装器中。像这样:

protected override ControlCollection Controls
{
    EnsureChildControls();
    return this._panel.Controls;
}

但是,当我这样做时,由于某种原因,不会维护子控件的视图状态。有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

ViewState是一个与控制树并行构建的对象图,因此这些类型的更改往往会产生您所描述的副作用。可以说你基本上是在劫持Controls对象并给它一个不同的含义,这实际上不是覆盖的意图。相反,覆盖是用于提供不同的机制来实现相同的含义或意图。 “我的一个孩子的孩子控制”“我的孩子控制”不同。

有更好的方法来完成你所描述的内容。一种可能是在控件上显式公开一个属性,即“区域”用户应该添加其控件。如果目的是为了一个复杂的控件,它有一个可自定义的区域,那么就这样暴露那个区域。