开发者

No display custom Tag in asp.net

I am building custom asp.net server control. It is used in design time but no display run time. I write this.

   <cc1:TemplateMenu ID="TemplateMenu1" runat="server">
        <HeaderTemplate>
            <asp:Label ID="Title" Text="Hello World" runat="server"></asp:Label>
        </HeaderTemplate>
        <SperatorTemplate>|</SperatorTemplate>
        <FooterTemplate>
            <asp:TextBox ID="TextBox" Text="" runat="server"></asp:TextBox>
            <asp:Button ID="Button" Text="Click Me"  runat="server"/>
        </FooterTemplate>
    </cc1:TemplateMenu>

This is design time.

This is server control code file.

Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Text
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls
Imports Yoma.Yoma.CustomControls.BasicTemplate

Namespace Yoma.CustomControls.TemplateMenu

    <DefaultProperty("Text"), ToolboxData("<{0}:TemplateMenu runat=server></{0}:TemplateMenu>")> _
    Public Class TemplateMenu
        Inherits CompositeControl

        Private MenuData As New ArrayList

        Public Sub New()

            MenuData = New ArrayList

            Dim Menu开发者_JAVA技巧Item As New ListItem

            MenuItem.Text = "Apress"
            MenuItem.Value = "http://www.apress.com"
            MenuData.Add(MenuItem)

            MenuItem = New ListItem
            MenuItem.Text = "Microsoft"
            MenuItem.Value = "http://www.microsoft.com"
            MenuData.Add(MenuItem)

            MenuItem = New ListItem
            MenuItem.Text = "ASP.Net"
            MenuItem.Value = "http://asp.net"
            MenuData.Add(MenuItem)

        End Sub

#Region "HeaderTemplate"

        Private _HeaderTemplate As ITemplate = Nothing

        <Browsable(False), Description("The header template"), PersistenceMode(PersistenceMode.InnerProperty)> _
        Public Property HeaderTemplate() As ITemplate
            Get
                Return _HeaderTemplate
            End Get
            Set(ByVal value As ITemplate)
                _HeaderTemplate = value
            End Set
        End Property

#End Region

#Region "FooterTemplate"

        Private _FooterTemplate As ITemplate = Nothing

        <Browsable(False), Description("The footer template"), PersistenceMode(PersistenceMode.InnerProperty)> _
        Public Property FooterTemplate() As ITemplate
            Get
                Return _FooterTemplate
            End Get
            Set(ByVal value As ITemplate)
                _FooterTemplate = value
            End Set
        End Property

#End Region

#Region "SperatorTemplate"

        Private _SperatorTemplate As ITemplate = Nothing

        <Browsable(False), Description("The sperator template"), PersistenceMode(PersistenceMode.InnerProperty)> _
        Public Property SperatorTemplate() As ITemplate
            Get
                Return _SperatorTemplate
            End Get
            Set(ByVal value As ITemplate)
                _SperatorTemplate = value
            End Set
        End Property

#End Region

#Region "Create Control"

        Public Sub CreateControlHierarchy()

            If HeaderTemplate Is Nothing Then
                Dim Header As New BasicTemplateContainer

                HeaderTemplate.InstantiateIn(Header)
                Controls.Add(Header)
            End If

            Dim Count As Integer = MenuData.Count

            For Each Item As ListItem In MenuData
                Dim Link As New HyperLink

                Link.Text = Item.Text
                Link.NavigateUrl = Item.Value
                Controls.Add(Link)
                Controls.Add(New LiteralControl("|"))
            Next

            If FooterTemplate Is Nothing Then
                Dim Footer As New BasicTemplateContainer

                FooterTemplate.InstantiateIn(Footer)
                Controls.Add(Footer)
            End If

        End Sub

        Protected Overrides Sub CreateChildControls()
            Controls.Clear()
            CreateControlHierarchy()
        End Sub

        Public Overrides ReadOnly Property Controls() As ControlCollection
            Get
                EnsureChildControls()
                Return MyBase.Controls
            End Get
        End Property

        Public Overrides Sub DataBind()
            CreateChildControls()
            ChildControlsCreated = True
            MyBase.DataBind()
        End Sub

#End Region

    End Class

End Namespace

Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Text
Imports System.Web
Imports System.Web.UI
Imports System.Web.UI.WebControls

Namespace Yoma.CustomControls.BasicTemplate

    <DefaultProperty("Text"), ToolboxData("<{0}:BasicTemplateContainer runat=server></{0}:BasicTemplateContainer>")> _
    Public Class BasicTemplateContainer
        Inherits WebControl
        Implements INamingContainer

        Public Sub New()
            Me.BorderWidth = 2
            Me.BorderStyle = WebControls.BorderStyle.Outset
        End Sub

    End Class

End Namespace

Please help me... I got a really problem.


Have you invoked DataBind method for your control from your Page code? Unless you do that, your control tree may not be created.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜