Je suis en train de développer un contrôle qui permettra au développeur de remplir une collection via le balisage (par exemple, les propriétés décorées avec l'attribut PersistenceMode (PersistenceMode.InnerProperty) J'ai un example de Brian Chavez que plus ou moins fait ce que je veux, mais je veux avoir le Hériter de contrôle de UserControl et contrôle nonProblèmes avec UserControl et Inner Properties
Voici le code que j'ai en 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
Le fichier ascx ressemble:
<%@ Control Language="VB" AutoEventWireup="false" CodeFile="ucAdminTabControl.ascx.vb" Inherits="AggregateFeeds" %>
Ma page de test est réel simple et ressemble à:
<%@ 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>
Comme il est maintenant, quand je tente de compiler je reçois une erreur de compilation qui dit simplement objet instance non définie sur une instance d'un objet sur la ligne ci-dessus. Si je l'enlève, la page se charge très bien et l'objet Settings reflète les valeurs du balisage. Pourquoi ai-je des difficultés à remplir la collection correctement?
Merci pour votre réponse. Cela peut fonctionner mais je sais que l'exemple sur le site de Brian Chavez fonctionne comme prévu et n'implique pas cela et je voudrais éviter de faire de RssFeedCollection un UserControl quand il est vraiment mieux adapté comme une simple collection d'objets simples –
@EDIT: Il n'a qu'à hériter de Control, mon erreur. –
J'ai ajouté une nouvelle solution. L'ancien est toujours utile pour mettre en évidence l'utilisation de la méthode "AddParsedSubObject", mais le nouveau vous permet d'utiliser correctement les attributs. –