Aggiungere il profilo agli utenti creati tramite il controllo CreateUserWizard

di Stefano Mostarda, in ASP.NET 2.0, Profile API, web.config,

Le Membership API permettono di memorizzare solo alcuni dati di un utente, ovvero quelli necessari per l'identificazione (UserName, password, email, ecc.).

Una delle operazini più comuni quando si vuole registrare un nuovo utente è aggiungere alti dati come il nome, l'età, il sesso e altro ancora. La gestione di questi dati è affidata invece alle Profile API.

Quando si usa il controllo CreateUserWizard per creare l'utente, si possono aggiungere diversi campi per inserire anche i dati che vanno nel suo profilo. Il controllo salva automaticamente l'utente, ma poichè Profile API e Membership API non sono completamente integrate, il compito di salvare il profilo contestualmente alla creazione dell'utente è compito nostro.

Innanzitutto si abilita il Profile nel web.config aggiungendo un campo per l'età:

<profile enabled="true">
  <properties>
    <add name="Age" type="Int32"/>
  </properties>
</profile>

Successivamente si trasforma in template lo step della creazione dell'utente aggiungendo il nuovo campo:

<asp:createuserwizard id="CreateUserWizard1" runat="server" oncreateduser="CreateUserWizard1_CreatedUser" >
  <wizardsteps>
    <asp:createuserwizardstep id="CreateUserWizardStep1" runat="server">
      <contenttemplate>
        ...
        <tr>
          <td align="right"><asp:label id="Label1" runat="server" associatedcontrolid="Answer">Age</asp:label></td>
          <td><asp:textbox id="txtAge" runat="server"></asp:textbox></td>
        </tr>
        <tr>
          <td colspan="2"><asp:label id="Label1" runat="server" associatedcontrolid="Answer">Age</asp:label></td>
          <td><asp:textbox id="txtAge" runat="server"></asp:textbox></td>
        </tr>
        ...
      </contenttemplate>
    </asp:createuserwizardstep>
  </wizardsteps>
  ...
</asp:createuserwizard>

Infine si crea un delegate per la gestione dell'evento CreatedUser, che genererà il nuovo profilo riempiendo il campo con il valore inserito nella textbox.

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
  // creiamo il profilo vuoto per la prima volta
  ProfileCommon p = (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true);

  // popoliamo con i valori presi dalla TextBox
  p.Age = Convert.ToInt32(((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("txtAge")).Text);

  // salviamo il profilo in maniera esplicita
  p.Save();
}

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