ASP.NET пользовательский список управления / коллекция / свойство массива - PullRequest
6 голосов
/ 10 июня 2010

Я создал пользовательский элемент управления. Он имеет string[] публичную собственность (это может быть List<string> или что-то еще). Я хочу поддержать определение этого свойства в коде aspx при объявлении экземпляра этого usercontrol. Примерно так:

<uc1:MyControl ID="MyControl1" runat="server">
    <MyStringCollectionProperty>
        <string>My String 1</string>
        <string>My String 2</string>
        <string>My String 3</string>
    </MyStringCollectionProperty>
</uc1:MyControl>

Как заставить это работать? Спасибо ...

Ответы [ 5 ]

6 голосов
/ 07 октября 2012

На самом деле вы можете использовать TypeConverterAttribute для указания класса конвертера (в данном случае StringArrayConverter).

1 голос
/ 14 июля 2010

Насколько я знаю, вы не можете делать то, что хотите, с помощью пользовательского элемента управления.Вам необходимо написать пользовательский элемент управления.

См. Пример свойств элемента управления сервером в MSDN.

1 голос
/ 31 июля 2010

Вот пример того, как выполнить то, что вы просите. Дочерние элементы управления считываются как HTMLGeneric Controls, поэтому их необходимо преобразовать. Когда они читаются, я конвертирую их в свой собственный класс "StringControl". Если вы хотите использовать более продвинутую структуру, вы можете просто улучшить конструктор для 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

Затем можно посмотреть в «MyControl1.MyStringCollectionProperty» все значения.

0 голосов
/ 30 октября 2012

Пользовательский элемент управления и коллекция элементов дружественных свойств (например, ListBox и ListItems, но со списком ) в .ASPX

, вы можете использовать коллекцию, а также список.*

обязательно отметьте http://msdn.microsoft.com/en-us/library/9txe1d4x%28v=vs.100%29.aspx - это очень хорошо подходит для управления пользователем, и в ссылке на stackoverflow выше я объяснил, как вы можете ссылаться на странице aspx или в webconfig

0 голосов
/ 14 июля 2010

Путем явного ввода значений переменных в разметку, в соответствии с вашим примером, вы напрямую комбинируете свой пользовательский интерфейс со своей логикой.

Если эти значения никогда не изменяются, то нет смысла помещать их в разметку - было бы лучше поместить их в код вашего пользовательского элемента управления.

Если эти значения могут отличаться при каждой загрузке пользовательского элемента управления, то они должны исходить из динамического источника, такого как переменные состояния сеанса, публичные переменные, значения элемента управления и т. Д. (В этом случае пользовательский элемент управления будет выглядеть их каждый раз при загрузке.)

Если эти значения изменяются только во время разработки, вы все равно можете установить их нагрузку, как указано выше, но в этом случае вы можете рассмотреть возможность создания «пользовательского элемента управления».

В любом случае, точно не знаете, чего именно вы пытаетесь достичь, поэтому надеюсь, что один из этих вариантов может помочь.

Удачи

...