Condividi tramite


Definizione delle proprietà dei profili ASP.NET

Aggiornamento: novembre 2007

Il profilo ASP.NET consente di memorizzare valori semplici (scalari), insiemi ad altri tipi complessi, nonché i tipi definiti dall'utente.

Informazioni sulla definizione delle proprietà

Per definire una proprietà nel profilo, è necessario specificare un nome che verrà utilizzato per fare riferimento alla proprietà. Ad esempio, per memorizzare un codice postale, è possibile assegnare alla proprietà il nome PostalCode, quindi ottenere e impostare il valore della proprietà come Profile.PostalCode.

Per ciascuna proprietà è possibile definire le seguenti caratteristiche aggiuntive:

  • type   Specifica il tipo per la proprietà. Il valore predefinito è String. È possibile specificare come tipo qualsiasi classe .NET (Int32, DateTime, StringCollection e così via). Se il tipo non è stato definito in .NET Framework, è necessario verificare che l'applicazione Web in uso abbia accesso al tipo. È possibile includere l'assembly compilato del tipo nella directory Bin del sito Web o nella Global Assembly Cache, oppure inserire il codice sorgente per il tipo nella directory App_Code del sito Web.

  • serializeAs   Specifica il formattatore serializzazione (stringa, binario, XML o serializzazione specifica del provider). Per informazioni, vedere Serializzazione. Il serializzatore predefinito è string.

  • allowAnonymous   Specifica un valore booleano che indica se la proprietà è gestita per utenti anonimi. Per impostazione predefinita, tale valore è false. Per consentire agli utenti non autenticati di accedere alla proprietà, impostare la proprietà su true.

  • defaultValue   Specifica un valore di inizializzazione per la proprietà.

  • readOnly   Specifica un valore booleano che indica se la proprietà può essere modificata.

  • provider   Specifica un provider specifico per la proprietà. Per impostazione predefinita, tutte le proprietà vengono gestite dal provider predefinito specificato per le proprietà dei profili. Tuttavia, le singole proprietà possono anche utilizzare provider diversi.

  • customProviderData   Specifica una stringa facoltativa contenente informazioni personalizzate che vengono passate al provider di profili. I singoli provider possono implementare una logica personalizzata per l'utilizzo di questi dati.

Le proprietà dei profili possono inoltre essere organizzate in gruppi di proprietà utilizzando l'elemento di configurazione group, illustrato più avanti in questo argomento.

Utilizzo di valori scalari

La memorizzazione di valori scalari, quali stringhe, valori numerici o valori DateTime di un profilo, richiede solamente una configurazione minima. È necessario fornire il nome e il tipo. Il sistema di profilo converte il valore di un tipo specifico in una stringa e viceversa, in base ai requisiti necessari per la memorizzazione. Quando si accede alla proprietà mediante la proprietà Profile, viene applicato un valore di tipo appropriato.

Ad esempio, se si desidera memorizzare il nome utente, il peso e la data di nascita, è possibile definire una proprietà denominata Name di tipo String, un'altra denominata Weight di tipo Int32 e una terza denominata BirthDate di tipo DateTime. Nel file di configurazione, le definizioni delle proprietà saranno analoghe a quanto riportato di seguito:

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

Per la proprietà Name, non è necessario specificare in modo esplicito un tipo, perché la proprietà è di tipo String, ovvero corrisponde all'impostazione predefinita. Per tutti gli altri tipi, è necessario fornire una referenza completa del tipo.

Nell'ottenimento o nell'impostazione dei valori delle proprietà, è necessario utilizzare il tipo appropriato all'interno del codice. Nell'esempio di codice riportato di seguito vengono illustrate le modalità di utilizzo della proprietà BirthDate.

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

Utilizzo di tipi di proprietà complessi

È anche possibile memorizzare nei profili utente tipi complessi come, ad esempio, gli insiemi. Per i tipi complessi, è necessario fornire le informazioni sulle modalità di serializzazione del tipo, in modo che il sistema di profilo possa ottenere e impostare il valore della proprietà come tipo appropriato.

Nell'esempio riportato di seguito viene illustrata la definizione di proprietà per un valore di tipo insieme.

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

Per impostare una proprietà di questo tipo, è possibile utilizzare un codice analogo al seguente:

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

Utilizzo di tipi di proprietà definiti dall'utente

È anche possibile memorizzare e utilizzare valori di proprietà di profilo che sono istanze di classi create dall'utente. La classe creata deve supportare la serializzazione per i membri che si desidera memorizzare nel profilo utente.

Nell'esempio di codice riportato di seguito viene illustrata una classe ShoppingCart semplice, che mantiene un insieme di elementi Cart i quali, a loro volta, memorizzano un identificatore di elementi, un nome e un costo.

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;
    }
}

Per configurare il profilo utente in modo da utilizzare istanze di memorizzazione di questa classe, aggiungere la seguente sezione al file Web.config dell'applicazione:

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

Per memorizzare dati di tipo personalizzato nel profilo utente, creare un'istanza di tipo personalizzato, come in qualsiasi applicazione, quindi assegnarla alla proprietà di profilo definita per quel tipo. Nell'esempio di codice riportato di seguito vengono illustrate le modalità di utilizzo di una proprietà di profilo creata come tipo personalizzato.

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;

Utilizzo di gruppi di proprietà

Le proprietà possono essere organizzate nel profilo utente in gruppi di proprietà. I gruppi di proprietà di profilo vengono definiti mediante l'elemento di configurazione group. Ad esempio, le diverse proprietà delle informazioni relative all'indirizzo dell'utente possono essere raggruppate nel gruppo Address. È quindi possibile accedere a un gruppo di proprietà utilizzando l'identificatore del gruppo e il nome della proprietà (ad esempio, Profile.Address.Street o Profile.Address.City). Nell'esempio riportato di seguito viene illustrata la configurazione di una proprietà di profilo in cui alcune proprietà sono state riunite in un gruppo.

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

Vedere anche

Concetti

Cenni preliminari sulle proprietà dei profili ASP.NET

Provider di profili ASP.NET