Вам не нужно реализовывать IParserAccessor, чтобы получить такую функциональность, о которой вы говорите. Вместо этого создайте коллекцию для хранения дочерних элементов управления (мы назовем ее «Предметы») в вашем серверном элементе управления и примените атрибут ParseChildren
к своему элементу управления сервером со значением «Элементы» в качестве значения DefaultProperty.
Следующая ссылка содержит пример того, как реализовать ParseChildren:
http://msdn.microsoft.com/en-us/library/aa310907(v=vs.71).aspx
Обновление
Информация о IParserAccessor:
От: http://msdn.microsoft.com/en-us/library/system.web.ui.iparseraccessor.aspx
Поскольку класс Control реализует этот интерфейс, легче
расширить этот класс и переопределить его реализацию
AddParsedSubObject метод, чем реализовать этот интерфейс самостоятельно.
От: http://forums.asp.net/t/879797.aspx/1 (см. Пост создателя изображения):
AddParsedSubObject является единственным методом IParserAccessor
интерфейс. Интерфейс IParserAccessor реализуется с помощью Control и
все классы, наследуемые от Control, а также класс ListItem.
Когда дочерние элементы управления или элементы серверных элементов управления, которые реализуют
Интерфейс IParserAccessor анализируется из HTML,
Метод AddParsedSubObject вызывается с помощью следующего метода
подпись следует:
VB - Sub AddParsedSubObject (ByVal obj As Object)
C # - void AddParsedSubObject (object obj)
Параметр obj представляет объект
это было проанализировано. В вашем собственном сервере элементы управления переопределены
Метод AddParsedSubObject, вы можете проверить тип объекта затем
привести и обработать его соответственно, например, как буквальный элемент управления или
как определенный дочерний элемент, добавив его в дочерние элементы управления
коллекция, коллекция предметов или что-то еще.
Вот пример из того же поста:
Где я впервые столкнулся с реализацией IParserAccessor
интерфейс и AddParsedSubObject были в определении класса для
дочерний элемент, который должен содержать в качестве внутреннего содержимого строку:
<WESNet:StyledList id="StyledList1" runat="server">
<WESNet:StyledItem Value="2" ForeColor="red">Two</WESNet:StyledItem>
<WESNet:StyledItem Value="5"
ForeColor="green">Five</WESNet:StyledItem></WESNet:StyledList>Because
мой класс StyledItem не наследовал от Control, мне пришлось реализовать
IParserAccessor и его AddParsedSubObject следующим образом:
Protected Sub AddParsedSubObject(ByVal obj As Object) Implements IParserAccessor.AddParsedSubObject
If TypeOf obj Is LiteralControl Then
Me.Text = CType(obj, LiteralControl).Text
Else
Throw New ArgumentException("Inner content of StyledItem must contain only static text")
End If
End Sub
Затем в моем классе StyledList (который унаследован от WebControl) мне нужно было переопределить его
Метод AddParsedSubObject выглядит следующим образом:
Protected Overrides Sub AddParsedSubObject(ByVal obj As Object)
If TypeOf obj Is StyledItem Then
Dim si As StyledItem = CType(obj, StyledItem)
Items.Add(si)
Else
Throw New ArgumentException ("A StyledList server control may contain only StyledItems")
End If
End Sub
Здесь, после проверки того, что obj является StyledItem, он добавляется в
Коллекция предметов контроля.