2011-10-21 16 views
5

Estoy utilizando la API de membresía con la implementación de OpenId en mi proyecto basado en MVC2 framework. Además del nombre de usuario, necesito algunos otros campos para asociar con el usuario en el momento del registro.Almacenamiento de datos adicionales en la tabla aspnet_profile con datos de membresía

No estoy seguro, pero creo que el sistema Profile en asp.net está diseñado para este tipo de requisitos. Además, veo una tabla con otras tablas de membresía llamada 'aspnet_profile'.

que añade siguientes ajustes en el web.config solicitada para que el perfil:

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

     </properties> 

    </profile> 

Como se ha dicho antes, la aplicación necesita algunos datos adicionales para ser asociado con el usuario, por lo que cuando se crea un usuario que utiliza la API Afiliación , he añadido algunos más líneas de código para hacer entrada en la tabla perfil

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"); 



        } 

Pero no veo ninguna línea agregada en la tabla aspnet_profile en la base de datos. Además, quería preguntar si esta es la manera preferida de añadir datos adicionales junto con los datos de afiliación por defecto

Respuesta

4

me hizo trabajar al hacer algunos cambios relacionados con el defecto nombre del proveedor de perfil en el 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> 

También he añadido una línea más entre la llamada a la función ProfileBase.Create y ajuste de la Profile.FullName ;

profile.Initialize(userModel.userName, true); 

fin vi una entrada en la tabla aspnet_profile para el usuario recién registrado :)

+0

Útil y muchas gracias! –

1

1, es necesario crear una clase de perfil para definir la estructura del perfil

2, es necesario en las configuraciones de su configuración del perfil en web.config como

3, ahora se puede utilizar el código ahora.

solo tiene que hacer los primeros 2 pasos antes de usarlo.

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

+0

No quiero crear una clase separada para este perfil. Creo que me falta una configuración en web.config.No creo que sea necesario crear una clase de perfil para hacer que esto funcione –

1

Durante el uso de proveedor de perfil de ASP.NET, profile properties es la forma de personalizar el perfil de usuario. Sin embargo, no tiene que crear y guardar la instancia de perfil usted mismo, sino que se realiza mediante el tiempo de ejecución de ASp.NET. Use HttpContext.Current.Profile o use la propiedad dinámica fuertemente tipada Profile de la página. Mediante el uso posterior, puede escribir código como

Profile.UserName = "User Name"; 

No hay necesidad de llamar a Save método. Para obtener más información, consulte this article.

En una aplicación web, uno no puede hacer referencia a la clase creada dinámicamente el perfil, así que hay que trabajar con HttpContext.Current.Profile (por supuesto puede asignar a una variable dynamic de código más legible como se ha hecho por usted). Otra forma es escribir your own class.

+0

MVC no le da HttpContext.Current, puede acceder directamente a la clase de perfil usando HttpContext.Profile –

+0

@Kunal, 'HttpContext.Profile' es una propiedad de instancia, por lo que necesita una instancia de HttpContext que normalmente está disponible a través de 'HttpContext.Current' en cualquier aplicación ASP.NET (¡incluida ASP.NET MVC)! – VinayC

+0

@VinayC Quiere decir que en una clase MVC 'Controller' o' View', hay una propiedad 'HttpContext', que básicamente es un contenedor para' HttpContext.Current'. –

Cuestiones relacionadas