Asp.net 具有自定义集合属性的自定义控件
我有一个ASPX自定义控件,它应该将其属性加载到内部集合中(用PersistenceMode.InnerProperty定义)。这是ASPXAsp.net 具有自定义集合属性的自定义控件,asp.net,vb.net,custom-controls,Asp.net,Vb.net,Custom Controls,我有一个ASPX自定义控件,它应该将其属性加载到内部集合中(用PersistenceMode.InnerProperty定义)。这是ASPX <cc:CustomControl runat="server"> <Queries> <cc:QueryTypeOne ... /> </Queries> </cc:CustomControl> 而且,奇怪的是,如果我将QueriesContainerTag更改
<cc:CustomControl runat="server">
<Queries>
<cc:QueryTypeOne ... />
</Queries>
</cc:CustomControl>
而且,奇怪的是,如果我将QueriesContainerTag更改为使用内置的list类,那么一切都可以完美地工作
<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
_
公共类QueriesContainerTag
Private _查询作为(查询的)列表)=无
公共只读属性查询作为(查询的)列表
得到
如果什么都不是,那么
_查询=新列表(查询)()
如果结束
返回查询
结束
端属性
末级
Microsoft没有对自定义控件集合属性实施通用列表支持!当我添加了IList
接口后,一切都开始正常工作
就我个人而言,我不明白他们为什么这么做。更重要的是,我认为无论何时需要
IList
(IList
,对于你们这些C#家伙来说)都应该自动运行IList
。毕竟,T将始终从object继承。您是否尝试将Queries属性和QueryCollection权限放在自定义控件中,并查看是否效果更好?将语句也移到那里。事实证明,出于我无法理解的原因,Microsoft没有为自定义控件集合属性实现通用列表支持!我一添加IList接口,一切就完全按照预期开始工作。就我个人而言,我不明白他们为什么这么做。更重要的是,我认为IList(Of T)(IList for you C#guys)应该在需要IList的任何地方自动工作。毕竟,T将始终从对象继承。我想这就是生活。这节省了我很多时间。谢谢我用这个把头撞到了墙上。最后,我创建了一个从集合继承的自定义集合。集合类已经实现了IList,因此现在控件可以正常工作。
<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
Public Class QueryCollection
Implements IList(Of Query), ICollection(Of Query), IEnumerable(Of Query)
<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