Definieren von ASP.NET-Profileigenschaften

Aktualisiert: November 2007

Mit dem ASP.NET-Profilfeature können Sie einfache (skalare) Werte, Auflistungen und andere komplexe Typen sowie benutzerdefinierte Typen speichern.

Eigenschaftendefinitionsinformationen

Beim Definieren einer Eigenschaft in einem Profil geben Sie einen Namen an, mit dem Sie später auf die Eigenschaft verweisen können. Wenn z. B. eine Postleitzahl gespeichert werden soll, können Sie die Eigenschaft PostalCode nennen und dann den Eigenschaftenwert als Profile.PostalCode abrufen und festlegen.

Sie können wahlweise die folgenden zusätzlichen Merkmale für jede Eigenschaft definieren:

  • type   Gibt den Typ der Eigenschaft an. Die Standardeinstellung ist String. Sie können jede beliebige .NET-Klasse als Typ angeben (Int32, DateTime, StringCollection usw.). Wenn der Typ nicht in .NET Framework definiert ist, muss die Webanwendung Zugriff auf den Typ haben. Sie können die kompilierte Assembly des Typs in das Verzeichnis Bin der Website oder in den globalen Assemblycache (GAC) einfügen, oder Sie legen den Quellcode des Typs im Verzeichnis App_Code der Website ab.

  • serializeAs   Gibt die Serialisierungsformatierung (string, binary, XML oder anbieterspezifische Serialisierung) an. Einzelheiten finden Sie unter Serialisierung. Die Standardserialisierung ist string.

  • allowAnonymous   Gibt einen booleschen Wert an. Dieser zeigt an, ob die Eigenschaft für anonyme Benutzer verwaltet wird. Die Standardeinstellung ist false. Um die Eigenschaft nicht authentifizierten Benutzern zur Verfügung zu stellen, können Sie die Eigenschaft auf true festlegen.

  • defaultValue   Gibt einen Wert an, mit dem die Eigenschaft initialisiert wird.

  • readOnly   Gibt einen booleschen Wert an. Dieser zeigt an, ob die Eigenschaft geändert werden kann.

  • provider   Gibt einen Anbieter an, der für die Eigenschaft spezifisch ist. Standardmäßig werden alle Eigenschaften mit dem für die Profileigenschaften angegebenen Standardanbieter verwaltet. Einzelne Eigenschaften können aber auch andere Anbieter verwenden.

  • customProviderData   Gibt eine optionale Zeichenfolge an, die benutzerdefinierte Informationen enthält, die an den Profilanbieter übergeben werden. Einzelne Anbieter können eine benutzerdefinierte Logik für das Verwenden dieser Daten implementieren.

Zusätzlich können Profileigenschaften mit dem group-Konfigurationselement als Eigenschaftengruppen organisiert werden. Weitere Informationen dazu finden Sie weiter unten in diesem Thema.

Arbeiten mit Skalarwerten

Das Speichern von Skalarwerten wie Zeichenfolgen, numerischen Werten oder DateTime-Werten in einem Profil benötigt nur ein Mindestmaß an Konfiguration. Sie müssen einen Namen und den Typ angeben. Das Profilsystem konvertiert den Wert des angegebenen Typs in eine Zeichenfolge und – gemäß den Erfordernissen der Speicherung– auch wieder zurück. Wenn Sie auf eine Profile-Eigenschaft zugreifen, wird diese entsprechend typisiert.

Wenn Sie z. B. den Namen des Benutzers, sein Gewicht und sein Geburtsdatum speichern möchten, können Sie eine Eigenschaft mit dem Namen Name vom Typ String, eine weitere Eigenschaft mit dem Namen Weight vom Typ Int32 und eine dritte Eigenschaft mit dem Namen BirthDate vom Typ DateTime definieren. In der Konfigurationsdatei sehen die Eigenschaftendefinitionen folgendermaßen aus:

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

Für die Name-Eigenschaft müssen Sie nicht explizit einen Typ angeben, da die Eigenschaft den Standardtyp String hat. Für jeden anderen Typ müssen Sie einen vollqualifizierten Typverweis angeben.

Wenn Sie die Eigenschaftenwerte abrufen oder festlegen, müssen Sie im Code den entsprechenden Typ verwenden. Das folgende Codebeispiel zeigt, wie Sie mit der BirthDate-Eigenschaft umgehen:

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

Arbeiten mit komplexen Eigenschaftentypen

Sie können auch komplexe Typen (z. B. Auflistungen) in Benutzerprofilen speichern. Bei komplexen Typen müssen Sie Angaben zur Art und Weise der Typserialisierung machen, damit das Profilsystem den Eigenschaftenwert als richtigen Typ abrufen und festlegen kann.

Das folgende Beispiel zeigt eine Eigenschaftendefinition für einen Wert, der als Auflistung typisiert wurde:

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

Um eine Eigenschaft dieses Typs festzulegen, können Sie folgenden Code verwenden:

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

Arbeiten mit benutzerdefinierten Eigenschaftentypen

Sie können auch solche Profileigenschaftenwerte speichern und verwenden, die Instanzen selbst erstellter Klassen sind. Die erstellte Klasse muss die Serialisierung der Member unterstützen, die Sie im Benutzerprofil speichern möchten.

Das folgende Codebeispiel zeigt eine einfache ShoppingCart-Klasse, die eine Auflistung von Cart-Elementen verwaltet, die im Gegenzug Elementbezeichner, Name und Preis speichern:

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

Um das Benutzerprofil für eine Verwendung der gespeicherten Instanzen der Klasse zu konfigurieren, fügen Sie der Datei Web.config der Anwendung den folgenden Abschnitt hinzu:

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

Zum Speichern der Daten des benutzerdefinierten Typs im Benutzerprofil erstellen Sie eine Instanz des benutzerdefinierten Typs so wie in jeder anderen Anwendung auch, und weisen Sie die Instanz anschließend der Profileigenschaft zu, die Sie für den Typ definiert haben. Das folgenden Codebeispiel zeigt, wie Sie mit einer Profileigenschaft arbeiten, die als benutzerdefinierter Typ erstellt wurde:

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;

Arbeiten mit Eigenschaftengruppen

Eigenschaften können im Benutzerprofil als Eigenschaftengruppen organisiert werden. Profileigenschaftengruppen werden mit dem group-Konfigurationselement angegeben. So können beispielsweise die verschiedenen Eigenschaften in Bezug auf die Adressinformationen eines Benutzers in einer Gruppe mit dem Namen Address zusammengefasst werden. Sie können danach auf die gruppierten Eigenschaften mit dem Gruppenbezeichner und dem Eigenschaftennamen (z. B. Profile.Address.Street oder Profile.Address.City) zugreifen. Das folgende Beispiel zeigt eine Profileigenschaftenkonfiguration, bei der einige Eigenschaften in einer Gruppe organisiert sind.

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

Siehe auch

Konzepte

Übersicht über ASP.NET-Profileigenschaften

ASP.NET-Profilanbieter