Определение свойств профиля ASP.NET

Visual Studio 2010

Обновлен: Ноябрь 2007

Профиль ASP.NET позволяет хранить простые (скалярные) значения, коллекции и другие сложные типы, а также типы, определяемые пользователем.

При задании свойства в профиле следует указать имя, которое будет использоваться для ссылки на это свойство. Например, если требуется хранить почтовый индекс, можно назвать это свойство PostalCode, а затем получать и задавать значение этого свойства с помощью Profile.PostalCode.

При необходимости можно определить следующие дополнительные характеристики для каждого свойства:

  • type — указывает тип свойства. По умолчанию используется значение String. В качестве типа можно указать любой класс .NET (Int32, DateTime, StringCollection и т. д.). Если тип не определен в платформе .NET Framework, необходимо убедиться, что веб-приложение имеет доступ к этому типу. Можно включить скомпилированную сборку типа в каталог Bin веб-узла или в глобальный кэш сборок (GAC), или же поместить исходный код для типа в каталог App_Code веб-узла.

  • serializeAs — задает модуль форматирования сериализации (строка, двоичные данные, XML или сериализация, зависящая от поставщика). Дополнительные сведения см. в разделе Serialization. По умолчанию сериализация задается как строка.

  • allowAnonymous — задает логическое значение, указывающее, может ли свойство управляться анонимными пользователями. По умолчанию используется значение false. Если нужно, чтобы свойство было доступно для пользователей, не прошедших проверку подлинности, можно установить значение true.

  • defaultValue — задает значение, с которым свойство инициализируется.

  • readOnly — задает логическое значение, которое указывает, может ли свойство быть изменено.

  • provider — определяет поставщика, относящегося к свойству. По умолчанию все свойства управляются с помощью поставщика по умолчанию для свойств профиля, но для отдельных свойств можно использовать других поставщиков.

  • customProviderData — задает дополнительную строку, содержащую пользовательские сведения, которая передается поставщику профиля. Отдельные поставщики могут реализовывать пользовательскую логику для использования этих данных.

Кроме того, параметры профиля могут быть организованы в виде групп свойств с помощью элемента конфигурации группы, который рассматривается позже в этом разделе.

Хранение в профиле скалярных значений, таких как строки, числовые значения или значения DateTime, требует только минимальной настройки. Необходимо указать имя и тип. Система профиля преобразует значение из указанного типа в строку и обратно, как требуется для хранения. При обращении к свойству через свойство Profile оно будет вводиться соответствующим образом.

Например, если требуется хранить имя пользователя, вес и дату рождения, можно определить одно свойство с именем Name и типом String, другое свойство с именем Weight и типом Int32 и третье свойство с именем BirthDate и типом DateTime. В файле конфигурации определения свойств будут выглядеть следующим образом:

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

Для свойства Name необязательно явно указывать тип, поскольку свойство по умолчанию имеет тип String. Для любого другого типа необходимо предоставить полную ссылку типа.

При получении или задании значений свойств необходимо работать с соответствующим типом в коде. В следующем примере показано, как работать со свойством BirthDate:

DateTime bday = Profile.BirthDate;

В профиле пользователя можно также сохранять сложные типы, например коллекции. Для сложных типов необходимо предоставить сведения о том, как тип должен быть сериализован, чтобы система профиля могла получать и задавать значение свойства в качестве соответствующего типа.

В следующем примере показано определение свойств для значений с типом "Коллекция":

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

Чтобы задать свойство данного типа, можно использовать следующий код:

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

Можно хранить и использовать значения свойств профиля, которые являются экземплярами классов, созданных вручную. Создаваемый класс должен поддерживать сериализацию для членов, которые требуется сохранить в профиле пользователя.

В следующем примере кода показан простой класс ShoppingCart, поддерживающий коллекцию элементов Cart, которые в свою очередь хранят идентификатор элемента, имя и цену:

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

Чтобы настроить профиль пользователя для использования сохраненных экземпляров этого класса, добавьте следующий раздел в файл Web.config приложения:

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

Для хранения данных пользовательского типа в профиле пользователя следует создать экземпляр пользовательского типа, как в любом приложении, а затем назначить его свойству профиля, заданному для этого типа. В следующем примере показана работа со свойством профиля, созданным как пользовательский тип:

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;

В профиле пользователя свойства могут быть организованы в группы свойств. Группы свойств профиля задаются с помощью элемента конфигурации группы. Например, различные свойства сведений об адресе пользователя могут быть сгруппированы вместе в группе Address. Затем можно будет обращаться к этим сгруппированным свойствам с помощью идентификатора группы и имени свойства (например Profile.Address.Street или Profile.Address.City). В следующем примере показана конфигурация свойств профиля, которая организует некоторые свойства в группу.

<profile enabled="true">
  <properties>
    <add name="PostalCode" />
    <group name="Address">      <add name="Street" />      <add name="City" />      <add name="CountryOrRegion" />    </group>
  </properties>
</profile>
Показ: