У меня есть пользовательский элемент управления ASPX, который должен загружать свои свойства во внутреннюю коллекцию (определенную с помощью PersistenceMode.InnerProperty). Вот ASPX
<cc:CustomControl runat="server">
<Queries>
<cc:QueryTypeOne ... />
</Queries>
</cc:CustomControl>
Проблема в том, что когда я использую приведенный выше код, я получаю ошибку синтаксического анализатора "Тип 'CustomControls.QueryCollection' не имеет открытого свойства с именем 'QueryTypeOne'". (FYI QueryTypeOne наследует класс с именем Query). Я не хочу открытое свойство QueryTypeOne, я хочу, чтобы оно загружалось в свойство QueryCollection, которое я жду его!
Вот весь соответствующий код.
CustomControls.CustomControl класс имеет свойство под названием запросы
<DefaultValue(CType(Nothing, String)),
MergableProperty(False),
PersistenceMode(PersistenceMode.InnerProperty)> _
Public Property Queries As QueriesContainerTag
И QueriesContainerTag просто существует, чтобы механизм ASPX мог получить доступ к коллекции (QueryCollection)
<ParseChildren(True, "Queries"),
Serializable()> _
Public Class QueriesContainerTag
Private _Queries As QueryCollection = Nothing
Public ReadOnly Property Queries As QueryCollection
Get
If _Queries Is Nothing Then
_Queries = New QueryCollection()
End If
Return _Queries
End Get
End Property
End Class
Где QueryCollection - это пользовательский класс, который реализует ICollection с этой подписью:
Public Class QueryCollection
Implements IList(Of Query), ICollection(Of Query), IEnumerable(Of Query)
Также, как ни странно, если я изменил QueriesContainerTag для использования встроенного списка, все работает отлично!
<ParseChildren(True, "Queries"),
Serializable()> _
Public Class QueriesContainerTag
Private _Queries As List(Of Query) = Nothing
Public ReadOnly Property Queries As List(Of Query)
Get
If _Queries Is Nothing Then
_Queries = New List(Of Query)()
End If
Return _Queries
End Get
End Property
End Class