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";
}Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Per inserire un commento, devi registrarti alla nostra community.








Stampa
Snippet
Download 


