ASP.NET プロファイル プロパティの定義
更新 : 2007 年 11 月
ASP.NET プロファイルには、単純な値 (スカラ値)、コレクションなどの複合型、およびユーザー定義型を格納できます。
プロパティの定義情報
プロファイルにプロパティを定義する場合は、プロパティを参照するために使用する名前を指定します。たとえば、郵便番号を保存する場合は、プロパティに PostalCode という名前を付け、Profile.PostalCode としてプロパティ値を取得および設定します。
各プロパティには、次のような追加特性を定義できます。
type プロパティの型を指定します。既定値は String です。型としては、Int32、DateTime、StringCollection などの任意の .NET クラスを指定できます。.NET Framework で定義されていない型については、Web アプリケーションがその型にアクセスできることを確認する必要があります。型のコンパイル済みアセンブリを Web サイトの Bin ディレクトリまたはグローバル アセンブリ キャッシュ (GAC: Global Assembly Cache) に格納できます。または型のソース コードを Web サイトの App_Code ディレクトリに格納することもできます。
serializeAs シリアル化フォーマッタ (文字列、バイナリ、XML、またはプロバイダ固有のシリアル化) を指定します。詳細については、「シリアル化」を参照してください。既定のシリアル化は文字列です。
allowAnonymous 匿名ユーザーもプロパティを使用できるようにするかどうかを示すブール値を指定します。既定値は false です。認証を受けていないユーザーもプロパティを使用できるようにするには、このプロパティを true に設定します。
defaultValue プロパティを初期化するための値を指定します。
readOnly プロパティを変更できるかどうかを示すブール値を指定します。
provider プロパティ固有のプロバイダを指定します。既定では、すべてのプロパティはプロファイル プロパティに指定されている既定のプロバイダを使用して管理されますが、各プロパティは個別のプロバイダを使用することもできます。
customProviderData プロファイルのプロバイダに渡すカスタム情報を含む文字列を指定します (省略可能)。個々のプロバイダには、このデータを使用するためのカスタム ロジックを実装できます。
さらに、プロファイル プロパティはこのトピックで後述する group 構成要素を使用してプロパティのグループとして編成することもできます。
スカラ値の使用
文字列、数値、または DateTime 値などのスカラ値をプロファイルに格納するには、最小限の構成のみが必要です。指定する必要があるのは、名前と型です。格納の必要に応じて、プロファイルのシステムが、指定された型から文字列への値の変換およびその逆の値の変換を行います。Profile プロパティを介してプロパティにアクセスすると、適切に型指定されます。
たとえば、ユーザーの名前、体重、および生年月日を格納する場合は、String 型の Name、Int32 型の Weight、および DateTime 型の BirthDate という 3 つのプロパティを定義します。プロパティは、構成ファイルで次のように定義します。
<profile defaultProvider="AspNetSqlProfileProvider">
<properties>
<add name="Name" /> <add name="Weight" type="System.Int32" /> <add name="BirthDate" type="System.DateTime" />
</properties>
</profile>
Name プロパティについては、既定の型が String なので、明示的に型を指定する必要はありません。他の型については、完全修飾された型参照を指定する必要があります。
プロパティ値を取得または設定する場合は、コードで正しい型を使用する必要があります。BirthDate プロパティを使用する方法のコード例を次に示します。
Dim bday As DateTime = Profile.BirthDate
DateTime bday = Profile.BirthDate;
複合型のプロパティの使用
ユーザー プロファイルには、コレクションなどの複合型を格納することもできます。複合型では、プロファイル システムが適切な型でプロパティ値を取得および設定できるように、型をシリアル化する方法に関する情報を提供する必要があります。
コレクション型を指定した値のプロパティの定義の例を次に示します。
<profile defaultProvider="AspNetSqlProfileProvider">
<properties>
<add name="FavoriteURLs" type="System.Collections.Specialized.StringCollection" serializeAs="Xml" />
</properties>
</profile>
この型のプロパティを設定するには、次のようなコードを使用します。
Dim favorites As System.Collections.Specialized.StringCollection
favorites = Profile.FavoriteURLs
System.Collections.Specialized.StringCollection favorites;
favorites = Profile.FavoriteURLs;
ユーザー定義型のプロパティの使用
独自に作成したクラスのインスタンスであるプロファイル プロパティ値を格納して使用することもできます。作成するクラスは、ユーザー プロファイルに格納するメンバのシリアル化をサポートする必要があります。
項目の識別子、名前、および価格を格納する Cart 項目のコレクションを管理する ShoppingCart サンプル クラスのコード例を次に示します。
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;
}
}
このクラスのインスタンスを格納するために使用するユーザー プロファイルを構成するには、アプリケーションの Web.config ファイルに次のセクションを追加します。
<profile defaultProvider="AspNetSqlProfileProvider">
<properties>
<add name="MyCart" type="Samples.AspNet.Profile.ShoppingCart" serializeAs="Binary" />
</properties>
</profile>
ユーザー プロファイルにカスタム型のデータを格納するには、アプリケーションで作成する要領でカスタム型のインスタンスを作成し、その型に対して定義したプロファイル プロパティに割り当てます。カスタム型として作成したプロファイル プロパティの使用方法のコード例を次に示します。
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;
プロパティのグループの使用
ユーザー プロファイルのプロパティは、プロパティのグループとして編成できます。プロファイル プロパティのグループは、group 構成要素を使用して指定します。たとえば、ユーザーのアドレス情報の個々のプロパティは、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>