Avatar billede xguy Nybegynder
03. november 2006 - 13:26 Der er 7 kommentarer og
1 løsning

Tilgå controls i templated custom control programmatisk

Hej,

Jeg har lavet mig en lille templated custom control (ikke databound).

Jeg vil dog meget gerne kunne tilgå eventuelle server controls der måtte blive placeret i templaten på min control. Sådan her:

<cc:mycontrol id="cc1" runat="server">
    <template>
        <asp:label id="lbl1" runat="server" />
    </template>
</cc:mycontrol>


Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    lbl1.Text = "hello"
End Sub


Det giver følgende fejl "Name 'lbl1' is not declared.", og selvfølgelig ingen intellisence på lbl1 i codebehind.

Min custom control ser sådan ud:

<ParseChildren(True)> _
    Public Class MyControl
        Inherits Control
        Implements INamingContainer

        Private _template As ITemplate

        <TemplateContainer(GetType(TemplateControl)), UI.PersistenceMode(PersistenceMode.InnerProperty)> _
        Public Property Template() As ITemplate
            Get
                Return _template
            End Get
            Set(ByVal value As ITemplate)
                _template = value
            End Set
        End Property

    End Class

Hvordan går jeg adgang til min label?
Og jeg vil gerne undgå cc1.FindControl("lbl1")...
Avatar billede mikkel_sommer Nybegynder
03. november 2006 - 13:42 #1
prøv med:

Dim lb1 As System.Web.UI.WebControls.Label = cc1.Controls(0)

Hvis altså din label er den første control i din controls controltree.
Avatar billede xguy Nybegynder
03. november 2006 - 13:45 #2
Det er lige præcis den måde jeg gerne vil undgå...
Avatar billede mikkel_sommer Nybegynder
03. november 2006 - 13:46 #3
Hvorfor det?
Avatar billede xguy Nybegynder
03. november 2006 - 13:55 #4
Fordi at min control bliver meget mere kompleks, og jeg vil ikke ende med at sidde og bruge cc1.Controls(0).Controls(5).Controls(2) osv.

Jeg har brug for at det er straight forward.
Avatar billede mikkel_sommer Nybegynder
03. november 2006 - 14:10 #5
Det tror jeg desværre ikke du kommer udenom, men lytter med hvis der var nogen der skulle kende til en måde...
Avatar billede bjorn_jeppesen Nybegynder
03. november 2006 - 14:16 #6
Har også kun kunne fange det med System.Web.UI.WebControls.Label = cc1.Controls(0) da kontrollen jo ligger i en template.
Avatar billede xguy Nybegynder
03. november 2006 - 14:16 #7
Smider du nogle controls i fx et Panel, så er du jo ikke tvunget til at tilgå dem via Panel.Controls(), hvis du forstår...

Det er jo ikke en databound control, som fx et gridview eller en repeater. Dér kommer man ikke udenom.
Avatar billede xguy Nybegynder
03. november 2006 - 14:48 #8
Arhhh. Hvad f... laver jeg?

<ParseChildren(False)>, og væk med templaten... det var det jeg ville.

<cc:mycontrol id="cc1" runat="server">
    <asp:label id="lbl1" runat="server" text="test" />
</cc:mycontrol>

Jeg har kun lavet templated controls indtil videre, derfor tog jeg det som en selvfølge... My bad.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester