Quando realizziamo custom control che fanno utilizzo di Template, per recuperare i riferimenti alle istanze dei controlli utilizziamo in genere il metodo FindControl(), che ci obbliga a cercare il controllo all'interno del contenitore.
Decorando la proprietà che restituisce l'oggetto ITemplate con l'attributo TemplateInstanceAttribute è possibile accedere ai controlli dichiarati nel Template, come faremmo con qualsiasi altro controllo contenuto nella pagina.
Per prima cosa, realizziamo un semplice control, esponiamo una proprietà del tipo ITemplate e decoriamola con l'attributo TemplateInstanceAttribute, passando al costruttore il valore Single dell'enumeratore TemplateIstance:
namespace TestWebControl { public class MyControl : Control { ITemplate myTemplate; [Browsable(false)] [DefaultValue(null)] [PersistenceMode(PersistenceMode.InnerProperty)] [TemplateInstance(TemplateInstance.Single)] public ITemplate MyTemplate { get { return myTemplate; } set { myTemplate = value; } } public MyControl() { } public override ControlCollection Controls { get { EnsureChildControls(); return base.Controls; } } protected override void CreateChildControls() { if (MyTemplate != null) { Control content = new Control(); Controls.Add(content); MyTemplate.InstantiateIn(content); } } } }
Fatto questo, inseriamo il controllo appena creato nella cartella /App_Code/ (oppure in una class library) e registriamolo nella pagina.
<%@ Register TagPrefix="Sample" Namespace="TestWebControl" %>
Aggiungiamo quindi al Template una semplice Label:
<Sample:MyControl runat="server" ID="test"> <MyTemplate> <asp:Label runat="server" ID="MyLabel"></asp:Label> </MyTemplate> </Sample:MyControl>
Sarà cosi possibile accedere direttamente alla Label nel nostro codice, senza usare FindControl, così:
protected void Page_Load(object sender, EventArgs e) { MyLabel.Text = "ASPItalia.com"; }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
I più letti di oggi
- Tutorial Entity Framework 6
- Tutorial Entity Framework
- Tutorial HTML5
- RT @aspitalia Partecipa al nostro evento #RCD4, fai un RT e sarai estratto per 1 copia di #sl3guidacompleta! http://u.aspitalia.com/bw
- Migliorare l'organizzazione delle risorse con Azure Policy
- Configurare più site su unico web role di Windows Azure
- Windows Phone 8 Developer Day - Milano
- ReBuild 2020 Live - Online
- ASPItalia.com Network: si aggiungono LINQItalia.com e SilverlightItalia.com
- Rilasciata la versione 1.0 di ASP.NET MVC