【问题标题】:Reusable Custom Control with Properties具有属性的可重用自定义控件
【发布时间】:2014-08-13 00:43:00
【问题描述】:

我已经构建了一个自定义控件类,这使得在我的 html 中构建侧边栏元素变得更加容易。

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

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>

任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    删除 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
    

    结束命名空间

    【讨论】:

    • 此外,从属性中删除“共享”也可以解决问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多