Costruire controls con template: un LoginView per ASP.NET 1.1

di Cristian Civera, in UserScript, ASP.NET, C#,

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

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

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