7
votes

Liste de contrôle de l'utilisateur ASP.NET / Collection / Propriété Array

J'ai créé le contrôle de l'utilisateur. Il a string [] Propriété publique (il peut s'agir de la liste ou autre). Je souhaite prendre en charge la définition de cette propriété dans le code ASPX, lorsque vous déclarez l'instance de cet UserControl. Quelque chose comme ceci: xxx

Comment le faire fonctionner? Merci ...


2 commentaires

Qu'essayez-vous d'atteindre? Vous ne pouvez pas simplement définir la propriété dans le code-derrière? (Par exemple, mycontrol1.mycollet = nouvelle liste {"FOO", "BAR"};) Ou, "runat =" serveur "/>


De Cource, je peux définir la propriété en code de code, comme "Option d'émérées". Ce que je veux, c'est séparer la déclaration d'interface utilisateur de la logique. Concernant votre deuxième option ("<% = nouvelle liste ..."). Cela ne fonctionne pas, car les balises de serveur ne peuvent pas contenir des expressions "<%%>".


5 Réponses :


0
votes

En entrant vos valeurs variables dans le point de vue explicitement, par votre exemple, vous combinez directement votre UI avec votre logique.

Si ces valeurs ne changent jamais, il ne sert à rien de les mettre dans la marque - il serait préférable de les mettre dans le code de votre utilisateur.

Si ces valeurs peuvent être différentes chaque fois que les charges de contrôle de l'utilisateur, ils devraient provenir d'une source dynamique, tels que des variables d'état de session, des variables publiques, des valeurs de contrôle, etc. (dans ce cas, votre contrôle de l'utilisateur les augmenter chaque fois qu'il charge.)

Si ces valeurs changent uniquement au moment de la conception, vous pouvez toujours les définir à nouveau comme ci-dessus, mais vous pourriez envisager d'envisager de construire un «contrôle personnalisé» dans ce cas.

Quoi qu'il en soit, je ne sais pas exactement ce que vous essayez d'atteindre, j'espère donc que l'une de ces options peut aider.

bonne chance


1 commentaires

En fait, cette propriété n'est pas étroitement liée à la logique commerciale. Il représente juste l'un des paramètres de ce contrôle utilisateur. Cependant, la définition de cette propriété dans la page_LOAD ne me satisfait maintenant. :) Merci pour vos conseils.



1
votes

Autant que je sache, vous ne pouvez pas faire ce que vous voulez faire avec un contrôle de l'utilisateur. Vous auriez besoin d'écrire un contrôle personnalisé.

voir Exemple de propriétés de contrôle du serveur sur MSDN.


0 commentaires

1
votes

Voici un exemple de comment accomplir ce que vous demandez. Les contrôles d'enfants sont lus sous forme de commandes HTMLGeneric, de sorte que vous devez les convertir. Comme ils sont lus, je les convertis dans ma classe "stringcontrol" personnalisée. Si vous souhaitez utiliser une structure plus avancée, vous pouvez simplement améliorer le constructeur de StringControl.

Partial Class UserControlStrings_MyControl
    Inherits System.Web.UI.UserControl

    Private _MyStringCollectionProperty As New MyUserControlStringCollectionClass(Me)

    <PersistenceMode(PersistenceMode.InnerProperty)>
    Public ReadOnly Property MyStringCollectionProperty As MyUserControlStringCollectionClass
        Get
            Return _MyStringCollectionProperty
        End Get
    End Property
End Class

Public Class MyUserControlStringCollectionClass
    Inherits ControlCollection

    Sub New(ByVal owner As Control)
        MyBase.New(owner)
    End Sub

    Public Overrides Sub Add(ByVal child As System.Web.UI.Control)
        MyBase.Add(New StringControl(child))
    End Sub
End Class

Public Class StringControl
    Inherits HtmlGenericControl

    Sub New(ByVal GenericControl As HtmlGenericControl)
        MyBase.New()
        Me.Value = GenericControl.InnerHtml
    End Sub

    Public Property Value As String = String.Empty

    Public Overrides Function ToString() As String
        Return Value
    End Function
End Class


0 commentaires

6
votes

Vous pouvez réellement utiliser tyconverterattribute pour spécifier une classe de convertisseur (Stringarrayconverter dans ce cas).


0 commentaires

0
votes

personnalisé Contrôle de l'utilisateur et collection d'articles de propriété conviviale (comme ListBox et ListItems, mais avec la liste ) sur .aspx

Vous pouvez utiliser une collection et une liste.

Assurez-vous de vérifier http: / /msdn.microsoft.com/en-us/library/9txe1d4x%28v=VS.100%29.aspx - Il s'applique très bien au contrôle de l'utilisateur et sur le lien Stackoverflow ci-dessus, j'ai expliqué comment vous pouvez créer un lien dans le Page ASPX ou WebConfig


0 commentaires