2011-10-21 11 views
5

Utilizzo l'API di appartenenza con implementazione OpenId nel mio progetto basato su framework MVC2. Oltre al nome utente, ho bisogno di altri campi da associare all'utente al momento della registrazione.Memorizzazione di dati aggiuntivi nella tabella aspnet_profile con dati Membership

Non sono sicuro, ma penso che il sistema di profili in asp.net sia costruito per questo tipo di requisito. Inoltre, vedo una tabella con altre tabelle di appartenenza denominate 'aspnet_profile'.

ho aggiunto seguenti impostazioni nel web.config applicazione per abilitare il profilo:

<profile enabled="true"> 
     <properties> 
     <add name="FullName" allowAnonymous="false"/> 

     </properties> 

    </profile> 

Come detto, l'applicazione bisogno di alcuni dati aggiuntivi da associato all'utente, quindi quando si crea un utente utilizzando Membership API , ho aggiunto qualche riga di codice per fare ingresso nel profilo tavolo

System.Web.Security.MembershipCreateStatus status = MembershipService.CreateUser(userModel.UserName, userModel.Password, userModel.UserName); 

        if (status == System.Web.Security.MembershipCreateStatus.Success) 
        { 
         FormsService.SignIn(userModel.UserName, true); 
         Session["Username"] = userModel.UserName; 

         dynamic profile = ProfileBase.Create(MembershipService.GetUser(userModel.UserName).UserName); 
         profile.FullName = userModel.UserFullName; 
         profile.Save(); 

         RedirectToAction("Tech", "Home"); 



        } 

Ma non vedo alcuna riga aggiunta nella tabella aspnet_profile nel database. Inoltre, volevo chiedere se questo è il modo preferito di aggiunta di dati aggiuntivi insieme ai dati di iscrizione di default

risposta

4

mi ha reso il lavoro apportando alcune modifiche relative al profilo nome del provider di default nel web.config:

<profile enabled="true" defaultProvider="AspNetSqlProfileProvider"> 
     <providers> 
     <clear/> 
     <add name="AspNetSqlProfileProvider" applicationName="/" connectionStringName="ApplicationServices" type="System.Web.Profile.SqlProfileProvider" /> 
     </providers> 

     <properties> 
     <add name="FullName" allowAnonymous="false"/> 

     </properties> 

    </profile> 

Inoltre ho aggiunto un altro confine tra chiamata alla funzione ProfileBase.Create e impostando la Profile.FullName ;

profile.Initialize(userModel.userName, true); 

finalmente ho visto una voce nella tabella di aspnet_profile per il nuovo utente registrato :)

+0

Utile e grazie mille! –

1

1, è necessario creare una classe profilo per definire la struttura profilo

2, è necessario configurare le solite impostazioni del profilo in web.config come

3, ora è possibile utilizzare il codice ora.

è sufficiente eseguire i primi 2 passaggi prima di utilizzarlo.

ref: http://weblogs.asp.net/jgalloway/archive/2008/01/19/writing-a-custom-asp-net-profile-class.aspx

+0

Non voglio creare una classe profilo separato per questo. Penso che manchi un'impostazione in web.config.Non credo sia necessario creare una classe profilo per fare questo lavoro –

1

Durante l'utilizzo di provider di profili ASP.NET, profile properties è il modo per personalizzare il profilo utente. Tuttavia, non è necessario creare e salvare l'istanza del profilo autonomamente, poiché viene eseguita da runtime ASp.NET. Utilizzare HttpContext.Current.Profile o utilizzare la proprietà dinamica fortemente digitata Profile dalla pagina stessa. Utilizzando poi, è possibile scrivere codice come

Profile.UserName = "User Name"; 

Non c'è bisogno di chiamare Save metodo. Per ulteriori informazioni, vedere this article.

In un'applicazione Web, non si può davvero fare riferimento alla classe Profilo creata dinamicamente, quindi è necessario lavorare con HttpContext.Current.Profile (è ovviamente possibile assegnarlo a una variabile dynamic per codice più leggibile come fatto dall'utente). Un altro modo è scrivere your own class.

+0

MVC non ti dà HttpContext.Current, puoi accedere direttamente alla classe profilo usando HttpContext.Profile –

+0

@Kunal, 'HttpContext.Profile' è una proprietà di istanza, quindi hai bisogno di un'istanza di HttpContext che è in genere disponibile tramite 'HttpContext.Current' in qualsiasi applicazione ASP.NET (incluso ASP.NET MVC)! – VinayC

+0

@VinayC Intende dire che in una classe MVC 'Controller' o' View', esiste una proprietà 'HttpContext', che è fondamentalmente un wrapper per' HttpContext.Current'. –

Problemi correlati