Webアプリケーションプロジェクトがあり、web.configにプロファイルプロパティを実装しています。ProfileCommon
グーグルで検索したオブジェクトにアクセスできないことがわかったとき、いくつかの回避策を見つけました。
- メンバーシッププロバイダーからユーザー/プロファイルのリストを取得するにはどうすればよいですか?
- プロファイル値を割り当てる方法は?
- 「ProfileCommonという名前は現在のコンテキストに存在しません」
- http://forums.asp.net/t/1487719.aspx/1?profile+common+non+existant+in+ASP+NET+4+0+
- http://weblogs.asp.net/jgalloway/archive/2008/01/19/writing-a-custom-asp-net-profile-class.aspx
等々。ProfileCommon
しかし、実行時にオブジェクトがあるとは誰も言いませんでした。これが私の例です:
<profile enabled="true">
<properties>
<add name="AdminRemark"/>
<add name="FacilityID" type="System.Int64" defaultValue="1"/>
</properties>
</profile>
この行はうまくコンパイルされて機能しますが、ハードコードされたプロパティ名があります。
rcbFacilityID.SelectedValue =
(ProfileBase.Create(userCurrent.UserName) as ProfileBase)
.GetPropertyValue("FacilityID").ToString();
しかし、この行はコンパイルされず、エラーが発生します。タイプまたは名前空間の名前'ProfileCommon'が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)):
rcbFacilityID.SelectedValue =
(ProfileBase.Create(userCurrent.UserName) as ProfileCommon)
.FacilityID.ToString();
しかし、実行時にVisual Studio Watchウィンドウで行を実行しようとしましたが、機能しました。イベントはキャストなしのタイプProfileBase.Create(userCurrent.UserName)
を表示しました。ProfileCommon
Intellisenseは機能しませんでしたが、オブジェクトを検査でき、両方のプロファイルプロパティが定義されていることがわかりました。
カスタムクラス以外の唯一の方法である場合は、ハードコードされたプロファイルプロパティ名を使用してもかまいませんが、クラスがコンパイル時ではなく実行時に使用できるProfileCommon
理由を説明したいと思います。ProfileCommon