具有属性的可重用自定义控件

时间:2009-11-13 23:33:39

标签: asp.net vb.net custom-controls

我已经构建了一个自定义控件类,可以更轻松地在我的html中构建侧栏元素。

我遇到的问题是,当我设置“Text”属性时,我最后一次设置它会被用于我页面上每个控件实例。这是我第一次这样做,所以我假设我错过了一些基本的东西。

Namespace CustomControl
Public Class SideBarElement : Inherits Literal

    ''' <summary>
    ''' Create Copyright Label
    ''' </summary>
    ''' <remarks></remarks>
    Protected Overrides Sub CreateChildControls()
        MyBase.Text = RenderHTML()
        MyBase.CreateChildControls()
    End Sub

    ''' <summary>
    ''' Set all copyright information.
    ''' </summary>
    Public Shared Function RenderHTML() As String
        Dim val As String


        val = "<div class=""side-bar-container"">" & _
                  "<div class=""side-bar-top"">" & _
                  "</div>" & _
                 " <div class=""side-bar-content"">" & _
                 _Text & _
                  "</div>" & _
                  "<div class=""side-bar-bottom"">" & _
                  "</div>" & _
              "</div>"

        Return val
    End Function

    ''' <summary>
    ''' Create Text Property
    ''' </summary>
    ''' <remarks></remarks>
    Private Shared _Text As String = String.Empty
    Public Shadows Property Text() As String
        Get
            Return _Text
        End Get
        Set(ByVal value As String)
            _Text = value
        End Set
    End Property
End Class

结束命名空间

使用此控件应该看起来像这样。

<sidebar:SideBarElement ID="SideBarElement1" runat="server">
 Bla Bla</br>My Fun Content.</sidebar:SideBarElement>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

删除Text和_Text属性解决了这个问题。文字控件已经内置了这些属性,因此我不需要覆盖它们。

Namespace CustomControl
Public Class SideBarElement : Inherits Literal

    ''' <summary>
    ''' Create Copyright Label
    ''' </summary>
    ''' <remarks></remarks>
    Protected Overrides Sub CreateChildControls()
        MyBase.Text = "<div class=""side-bar-container"">" & _
                            "<div class=""side-bar-top""></div>" & _
                            "<div class=""side-bar-content"">" & _
                                Text & _
                            "</div>" & _
                      "</div>"
        MyBase.CreateChildControls()
    End Sub
End Class

结束命名空间