Domanda

Nel mio controllo server, vorrei implementare qualcosa di simile al ListView:

<asp:ListView runat="server">
    <LayoutTemplate>
        <asp:PlaceHolder runat="server" id="itemPlaceholder" />
    </LayoutTemplate>
</asp:ListView>

Ho creato una proprietà ITemplate, posso impostare il layout nella pagina aspx, e sto facendo ITemplate.InstantiateIn(myControl).

Ma io non riesco a capire come inserire controlli presso il segnaposto. Sto indovinando che sarebbe stato qualcosa di simile MyTemplate.FindControl("itemPlaceholder").Controls.Add(myControl). Ho provato a lanciare il tipo di mia ITemplate, ma ottengo l'errore:

Unable to cast object of type 'System.Web.UI.CompiledTemplateBuilder' to type 'MyNamespace.MyLayoutTemplate'

Che cosa mi manca?

Modifica Ho appena trovato questo: http: //www.nikhilk. net / SingleInstanceTemplates.aspx Control developers can define templates to be single instance using metadata which causes the ID'd controls within the template contents to be promoted to the page level... The parser and code-generator together work behind the scenes to add member fields, and initialize them at the right time.. Sembra essere solo per i controlli utente? Ho provato a Page.FindControl() dopo aver fatto questo, ma non ho trovato nulla.

È stato utile?

Soluzione

Ok, questo era semplicemente una questione di errori degli utenti . I istanziata la ITemplate in un Panel, quindi ovviamente Page.FindControl() (che non è ricorsiva) non funzionerebbe. Una volta che ho fatto Panel.FindControl(), tutto ha funzionato.

Altri suggerimenti

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top