Nell'articolo su https://www.aspitalia.com/articoli/aspplus/databinding_templating.aspx abbiamo visto cosa sono i templates di ASP.NET.
Ora con questo script creiamo un esempio pratico che ne fa uso attraverso un controllo che mostra un certo codice a seconda che l'utente sia loggato o meno, sulla falsa riga del control LoginView presente in ASP.NET 2.0.
Il nostro controllo dispone di due proprietà AnonymousTemplate e LoggedInTemplate per definire il layout da mostrare a seconda dello stato di autenticazione.
Il succo del codice sta nella creazione dei controlli. Verificando la proprietà IsAuthenticated dell'interfaccia IIdentity istanziamo uno dei templates:
namespace ASPItalia.com.LoginView { [ParseChildren(true), PersistChildren(false)] public class LoginView : Control, INamingContainer { [..] protected virtual void CreateLoginView() { if (Context == null) return; // Determino il template da usare ITemplate template = null; if (Context.User.Identity.IsAuthenticated) template = LoggedInTemplate; else template = AnonymousTemplate; if (template != null) { // Creo il template in un sottocontrollo Control c = new Control(); template.InstantiateIn(c); this.Controls.Add(c); } } }
Importantissimi sono gli attributi ParseChildren, che indica di parserizzare i nodi figli come proprietà del controllo e non come dei sotto controlli, e l'attributo PersistChildren, che indica se i sottocontrolli devono essere persistiti, che nel nostro caso è impostato su false.
L'uso del controllo sarà quindi molto banale, ma al tempo stesso molto comodo:
<%@ Register TagPrefix="aspitalia" Assembly="LoginView" Namespace="ASPItalia.com.LoginView" %> <aspitalia:LoginView runat="server" id="login"> <AnonymousTemplate> Non sei autentiacato, effettua <asp:LinkButton onclick="login_Click" runat="server">login</asp:LinkButton> </AnonymousTemplate> <LoggedInTemplate> Ciao <%#User.Identity.Name%>| <asp:LinkButton onclick="logout_Click" runat="server">esci</asp:LinkButton> </LoggedInTemplate> </aspitalia:LoginView>
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.