我正在尝试开发一个控件,该控件允许开发人员通过标记填充集合(例如,用属性 PersistenceMode(PersistenceMode.InnerProperty) 装饰的属性。我有一个来自Brian Chavez的示例,它或多或少可以满足我的需求,但我希望控件继承自 UserControl 而不是 Control。
这是我在 vb.net 中的代码:
AggregateFeeds.ascx.vb
Imports Microsoft.VisualBasic
<ParseChildren(True)>
<PersistChildren(False)>
Public Class AggregateFeeds
Inherits UserControl
Public Sub New()
MyBase.New()
Me.Feeds = New RssFeedCollection()
Me.Settings = New AggregateSettings()
End Sub
Private _Feeds As RssFeedCollection
Private _Settings As AggregateSettings
<PersistenceMode(PersistenceMode.InnerProperty)>
Public Property Feeds As RssFeedCollection
Get
Return _Feeds
End Get
Private Set(ByVal value As RssFeedCollection)
_Feeds = value
End Set
End Property
<PersistenceMode(PersistenceMode.InnerProperty)>
Public Property Settings As AggregateSettings
Get
Return _Settings
End Get
Private Set(ByVal value As AggregateSettings)
_Settings = value
End Set
End Property
End Class
Public Class AggregateSettings
Public Property TimeOut As Integer
Public Property CacheResults As Boolean
Public Sub New()
TimeOut = 100
CacheResults = True
End Sub
End Class
Public Class RssFeedCollection
Inherits List(Of RssResource)
End Class
Public Class RssResource
Public Property Url As String = String.Empty
End Class
ascx 文件看起来像:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ucAdminTabControl.ascx.vb" Inherits="AggregateFeeds" %>
我的测试页面非常简单,看起来像:
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Test.aspx.vb" Inherits="Test" %>
<%@ Register Src="~/Survey/Controls/ucAdminTabControl.ascx" TagName="AggregateFeeds" TagPrefix="uc" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<uc:AggregateFeeds runat="server" ID="af">
<Settings CacheResults="False" TimeOut="250" />
<Feeds>
<uc:RssResource Url="http://test.com" />
</Feeds>
</uc:AggregateFeeds>
</div>
</form>
</body>
</html>
就像现在一样,当我尝试编译时,我得到一个编译器错误,它只是说对象实例未设置为上面一行中的对象实例。如果我把它拿出来,页面加载得很好,设置对象反映了标记中的值。为什么我无法正确填充集合?