在CompositeControl中公开子控件属性的常用方法如下:
public class MyControl : CompositeControl {
private TextBox _box;
public override short TabIndex
{
get
{
EnsureChildControls();
return _box.TabIndex;
}
set
{
EnsureChildControls();
_box.TabIndex = value;
}
}
protected override void CreateChildControls()
{
Controls.Clear();
_box = new TextBox {ID = "box"};
Controls.Add(_box);
}
// ...
}
这种方法是否正确?因为EnsureChildControls将TextBox添加到控件集合中,因此会触发其ViewState跟踪,因此对于这样的声明性构造:
<uc:MyControl ID="My" runat="server" TabIndex="10" />
ViewState不必要地混乱(或者不是吗?)