2

我正在尝试覆盖从 WebControl 继承的控件的 Controls 集合,以便当用户向 WebControl 添加控件时,我可以在它之前和之后放置按钮,并将其放入自己的包装器中。像这样的东西:

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

但是,当我这样做时,子控件的视图状态由于某种原因没有得到维护。有任何想法吗?

谢谢!

4

1 回答 1

1

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

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

于 2009-04-16T15:58:14.207 回答