Compartir a través de


Definición de las propiedades de perfil ASP.NET

Actualización: noviembre 2007

La característica de perfiles de ASP.NET permite almacenar valores simples (escalares), colecciones y otros tipos complejos, así como tipos definidos por el usuario.

Información sobre la definición de propiedades

Cuando se define una propiedad en el perfil, se especifica el nombre que se utilizará para hacer referencia a la misma. Por ejemplo, si desea almacenar un código postal, puede asignar el nombre PostalCode a la propiedad y, a continuación, podrá obtener y establecer el valor de la misma como Profile.PostalCode.

Opcionalmente puede definir las características adicionales siguientes para cada propiedad:

  • type   Especifica el tipo de la propiedad. El tipo predeterminado es String. Puede especificar cualquier clase de .NET como tipo (Int32, DateTime, StringCollection, etc.). Si el tipo no está definido en .NET Framework, debe asegurarse de que la aplicación Web tenga acceso a él. Puede incluir el ensamblado compilado del tipo en el directorio Bin del sitio Web o en la Caché de ensamblados global (GAC) o puede colocar el código fuente del tipo en el directorio App_Code del sitio Web.

  • serializeAs   Especifica el formateador de serialización (serialización de cadena, binaria, XML o específica del proveedor). Para obtener más información, vea Serialización. La serialización predeterminada es la de cadena.

  • allowAnonymous   Especifica un valor booleano que indica si la propiedad se administra para los usuarios anónimos. De forma predeterminada, el valor es false. Si desea que la propiedad esté disponible para los usuarios no autenticados, puede establecer la propiedad en true.

  • defaultValue   Especifica un valor con el que se inicializa la propiedad.

  • readOnly   Especifica un valor booleano que indica si se puede modificar la propiedad.

  • provider   Especifica un proveedor específico para la propiedad. De manera predeterminada, todas las propiedades se administran utilizando el proveedor predeterminado especificado para las propiedades de perfil, pero cada propiedad también puede utilizar otros proveedores.

  • customProviderData   Especifica una cadena opcional que contiene información personalizada que se pasa al proveedor de perfiles. Cada proveedor puede implementar lógica personalizada para el uso de estos datos.

Además, las propiedades de perfil pueden organizarse como grupos de propiedades mediante el elemento de configuración group, que se explica más adelante en este tema.

Trabajar con valores escalares

Para almacenar valores escalares como cadenas, valores numéricos o valores DateTime en un perfil sólo se necesita una configuración mínima. Debe proporcionar un nombre y el tipo. El sistema del perfil convertirá el valor del tipo especificado en una cadena y la devolverá como requiera el almacenamiento. Cuando tenga acceso a la propiedad a través de la propiedad Profile, ésta tendrá asignado el tipo adecuado.

Por ejemplo, si desea almacenar el nombre, el peso y la fecha de nacimiento del usuario, puede definir una propiedad denominada Name del tipo String, otra denominada Weight del tipo Int32 y una tercera denominada BirthDate del tipo DateTime. En el archivo de configuración, las definiciones de las propiedades presentarán la apariencia siguiente:

<profile defaultProvider="AspNetSqlProfileProvider">
  <properties>
     <add name="Name" />     <add name="Weight" type="System.Int32" />     <add name="BirthDate"           type="System.DateTime" />
  </properties>
</profile>

Para la propiedad Name no necesita especificar explícitamente un tipo, ya que la propiedad es del tipo String, que es el valor predeterminado. Para cualquier otro tipo debe proporcionar una referencia de tipo completa.

Cuando obtenga o establezca los valores de las propiedades, deberá trabajar con el tipo adecuado en el código. El ejemplo de código siguiente muestra cómo trabajar con la propiedad BirthDate:

Dim bday As DateTime = Profile.BirthDate
DateTime bday = Profile.BirthDate;

Trabajar con propiedades de tipo complejo

También puede almacenar tipos complejos, como colecciones, en los perfiles de usuario. En el caso de los tipos complejos, debe proporcionar información sobre cómo deberá serializarse el tipo para que el sistema del perfil pueda obtener y establecer el valor de la propiedad como el tipo adecuado.

En el ejemplo siguiente se muestra una definición de propiedad para un valor de tipo colección:

<profile defaultProvider="AspNetSqlProfileProvider">
  <properties>
    <add name="FavoriteURLs"       type="System.Collections.Specialized.StringCollection"      serializeAs="Xml" />
  </properties>
</profile>

Para establecer una propiedad de este tipo, podría utilizar código como el siguiente:

Dim favorites As System.Collections.Specialized.StringCollection
favorites = Profile.FavoriteURLs
System.Collections.Specialized.StringCollection favorites;
favorites = Profile.FavoriteURLs;

Trabajar con tipos de propiedades definidos por el usuario

También puede almacenar y utilizar valores de propiedades de perfil que sean instancias de sus propias clases. La clase que cree debe admitir la serialización de los miembros que desea almacenar en el perfil de usuario.

En el ejemplo de código siguiente se muestra una clase ShoppingCart sencilla que mantiene una colección de elementos Cart que, a su vez, almacenan el identificador, el nombre y el costo del elemento:

Namespace Samples.AspNet.Profile
    <Serializable()> _
    Public Class ShoppingCart 
        Public Created As DateTime 
        Public LastUpdated As DateTime 
        Public CartItems As Dictionary(Of String, CartItem) = _
            New Dictionary(Of String, CartItem)()
    End Class

    <Serializable()> _
    Public Class CartItem 
        Public Sub New(itemId As Integer, itemName As String, _
            itemCost As Double)
          ID = itemId
          Name = itemName
          Cost = itemCost
        End Sub

        Dim ID As Integer
        Dim Name As String
        Dim Cost As Double
    End Class
End Namespace
namespace Samples.AspNet.Profile 
{
    [Serializable]
    public class ShoppingCart {
        public DateTime Created;
        public DateTime LastUpdated;
        public Dictionary<string, CartItem> CartItems = new Dictionary<string, CartItem>();
    }

    [Serializable]
    public class CartItem {
        public CartItem(int itemId, string itemName, double itemCost)
        {
          ID = itemId;
          Name = itemName;
          Cost = itemCost;
        }

        int ID;
        string Name;
        double Cost;
    }
}

Para configurar el perfil de usuario a fin de que utilice las instancias del almacén de esta clase, agregue la sección siguiente al archivo Web.config de la aplicación:

<profile defaultProvider="AspNetSqlProfileProvider">
  <properties>
    <add name="MyCart"       type="Samples.AspNet.Profile.ShoppingCart"       serializeAs="Binary" />
  </properties>
</profile>

Para almacenar los datos del tipo personalizado en el perfil de usuario, deberá crear una instancia del tipo personalizado como se haría en cualquier aplicación y, a continuación, asignarla a la propiedad de perfil que definió para ese tipo. En el ejemplo de código siguiente se muestra cómo trabajar con una propiedad de perfil creada como tipo personalizado:

Dim bookCart As ShoppingCart = New ShoppingCart()
bookCart.CartItems.Add("Contoso", _
    New CartItem(37843, "Widget", 49.99))
bookCart.CartItems.Add("Microsoft", _
    New CartItem(39232, "Software", 49.99))
Profile.MyCart = bookCart
ShoppingCart bookCart = new ShoppingCart();
bookCart.CartItems.Add("Contoso", new CartItem(37843, "Widget", 49.99));
bookCart.CartItems.Add("Microsoft", new 
    CartItem(39232, "Software", 49.99));
Profile.MyCart = bookCart;

Trabajar con grupos de propiedades

Las propiedades se pueden organizar en el perfil de usuario como grupos de propiedades. Los grupos de propiedades de perfil se especifican mediante el elemento de configuración group. Por ejemplo, las distintas propiedades de la información relacionada con la dirección del usuario se pueden agrupar en el grupo Address. De este modo, podrá obtener acceso a las propiedades agrupadas mediante el identificador del grupo y el nombre de la propiedad (por ejemplo, Profile.Address.Street o Profile.Address.City). En el ejemplo siguiente se muestra una configuración de propiedades de perfil que organiza algunas propiedades en un grupo.

<profile enabled="true">
  <properties>
    <add name="PostalCode" />
    <group name="Address">      <add name="Street" />      <add name="City" />      <add name="CountryOrRegion" />    </group>
  </properties>
</profile>

Vea también

Conceptos

Información general sobre las propiedades de perfil de ASP.NET

Proveedores de perfiles de ASP.NET