Je sais que vous avez déjà accepté une réponse, mais je voulais vous faire savoir qu'il est possible de faire ce que vous essayez de faire en utilisant un convertisseur de type. Je préfère cette méthode car elle rend le contrôle plus convivial et plus facile à utiliser pour les autres.
Utilisation: (désolé pour le code VB ...)
<cc1:ServerControl1 ID="ServerControl11" runat="server" Items="Testing,Test2,Test3,Test4,Test5" />
code:
La clé est l'utilisation de l'attribut TypeConverter sur la propriété (voir après cette classe pour la définition).
Public Class ServerControl1
Inherits WebControl
<TypeConverter(GetType(StringToArray))> _
Public Property Items() As String()
Get
If ViewState("Items") IsNot Nothing Then
Return ViewState("Items")
Else
Return New String() {}
End If
End Get
Set(ByVal value As String())
ViewState("Items") = value
End Set
End Property
Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
MyBase.Render(writer)
For Each s As String In Items
writer.Write(String.Format("-{0}<br/>", s))
Next
End Sub
End Class
Public Class StringToArray
Inherits TypeConverter
Public Overloads Overrides Function CanConvertFrom(ByVal context As ITypeDescriptorContext, ByVal sourceType As Type) As Boolean
If sourceType Is GetType(String) Then
Return True
End If
Return MyBase.CanConvertFrom(context, sourceType)
End Function
Public Overloads Overrides Function ConvertFrom(ByVal context As ITypeDescriptorContext, ByVal culture As CultureInfo, ByVal value As Object) As Object
If TypeOf value Is String Then
Dim v As String() = CStr(value).Split(New Char() {","c})
Return v
End If
Return MyBase.ConvertFrom(context, culture, value)
End Function
End Class