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
- Effettuare il log delle chiamate a function di GPT in ASP.NET Web API
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare il metodo CountBy di LINQ per semplificare raggruppamenti e i conteggi
- Eseguire script pre e post esecuzione di un workflow di GitHub
- Creare una libreria CSS universale: Cards
- Migliorare l'organizzazione delle risorse con Azure Policy