ASP.NET用户控件列表/集合/数组属性

时间:2010-06-10 17:36:16

标签: asp.net list user-controls properties

我创建了用户控件。它有string[]公共财产(可能是List<string>或其他)。我想支持在声明此usercontrol的实例时在aspx代码中定义此属性。像这样:

<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 个答案:

答案 0 :(得分:6)

您实际上可以使用TypeConverterAttribute指定转换器类(在本例中为StringArrayConverter)。

答案 1 :(得分:1)

据我所知,您无法使用用户控件执行您想要执行的操作。您需要编写自定义控件。

请参阅MSDN上的Server Control Properties Example

答案 2 :(得分:1)

以下是如何完成所要求的示例。子控件作为HTMLGeneric控件读入,因此您必须转换它们。在阅读它们时,我将它们转换为我的自定义“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”中查找所有值。

答案 3 :(得分:0)

通过明确地在标记中输入变量值,根据您的示例,您将直接将UI与逻辑相结合。

如果这些值没有改变,那么将它们加入标记是没有意义的 - 将它们放入用户控件的代码中会更好。

如果每次用户控件加载时这些值可能不同,那么它们应该来自动态源,例如会话状态变量,公共变量,控制值等。(在这种情况下,您的用户控件会看起来每次加载它们都会起作用。)

如果这些值仅在设计时更改,您仍然可以按上述方式设置它们,但在这种情况下您可能会考虑构建“自定义控件”。

无论如何,不​​确定你想要达到的目标,所以希望其中一个选项可以提供帮助。

祝你好运

答案 4 :(得分:0)

Custom User Control and Friendly Property Item Collection (Like ListBox and ListItems, but with List<Class>) on .ASPX

您可以使用Collection和List。

一定要检查http://msdn.microsoft.com/en-us/library/9txe1d4x%28v=vs.100%29.aspx - 它非常适合用户控制,在上面的stackoverflow链接上我解释了如何在aspx页面或webconfig中链接