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.
Approfondimenti
Load test di ASP.NET Core con k6
Usare ASP.NET Core dev tunnels per testare le applicazioni su internet
Implementare il throttling in ASP.NET Core
Personalizzare l'errore del rate limiting middleware in ASP.NET Core
Short-circuiting della Pipeline in ASP.NET Core
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Cache policy su route groups di Minimal API in ASP.NET Core 7