Allowing a Server Control to Contain Custom Child Collection
●
2 minute(s) to read
●
Permalink
●
suggest edit
I’ve probably done this at least a dozen times, but when you don’t do something everyday, you tend to forget. I created a custom control that I wanted to place into a control collection. So, I created the child control as a custom server control. Then I created another server control that contained a property called Items as a Generic.List(Of T)
where T was my custom child control. I kept running my app and couldn’t figure out why I couldn’t create my child controls in the Parent. I forgot that I had to import the namespace System.ComponentModel
and add the PersistenceMode
property to the property. So, my code looked like this:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Public Class MyServerControlCollection
Inherits WebControl
Private \_Items As Generic.List(Of MyChildControl)
<PersistenceMode(PersistenceMode.InnerProperty)> \_
Public Property Items() As Generic.List(Of MyChildControl)
Get
Return \_Items
End Get
Set(ByVal value As Generic.List(Of MyChildControl))
\_Items \= value
End Set
End Property
Protected Overrides Sub CreateChildControls()
For Each obj As MyChildControl In Items
Me.Controls.Add(obj)
Next
MyBase.CreateChildControls()
End Sub
End Class
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MyServerControlCollection : WebControl
{
private Generic.List<MyChildControl> \_Items;
\[PersistenceMode(PersistenceMode.InnerProperty)\]
public Generic.List<MyChildControl> Items {
get { return \_Items; }
set { \_Items \= value; }
}
protected override void CreateChildControls()
{
foreach (MyChildControl obj in Items) {
this.Controls.Add(obj);
}
base.CreateChildControls();
}
}
Hope that helps!