3

私はここで少しピクルスに遭遇しました。同じソリューションの2つのアプリケーションで使用したカスタムプロファイルがあります。1つ目は、ユーザープロファイルと属性のカスタムセットを古い.netアプリケーションから.netメンバーシップメンバーシップ、ロール、プロファイルテーブルにインポートするために構築したWebアプリケーションでした。プロファイルベースから継承するプロファイル共通クラスを作成しました。両方のアプリケーションは、名前空間内に同じクラスのコピーを持っています。

using System;
using System.Web.Security;
using System.Web.Profile;
using System.Collections.Specialized;


namespace WebProject
{
    public class ProfileCommon : ProfileBase
    {
        public static ProfileCommon GetUserProfile(string username)
        {
            return Create(username) as ProfileCommon;
        }

        public static ProfileCommon GetUserProfile()
        {
            return Create(Membership.GetUser().UserName) as ProfileCommon;
        }

        [SettingsAllowAnonymous(false)]
        public string FirstName
        {
            get
            {
                return base["FirstName"] as string;
            }
            set
            {
                base["FirstName"] = value;
            }
        }

        [SettingsAllowAnonymous(false)]
        public string LastName
        {
            get
            {
                return base["LastName"] as string;
            }
            set
            {
                base["LastName"] = value;
            }
        }

        [SettingsAllowAnonymous(false)]
        public string Email
        {
            get
            {
                return base["Email"] as string;
            }
            set
            {
                base["Email"] = value;
            }
        }

        [SettingsAllowAnonymous(false)]
        public StringCollection Sites
        {
            get
            {
                return base["Sites"] as StringCollection;
            }

            set
            {
                base["Sites"] = value;
            }
        }
    }
}

Web構成ファイルのプロファイルプロバイダーセクションは次のようになります。

<profile defaultProvider="WebProjectProfileProvider" inherits="WebProject.ProfileCommon">
  <providers>
    <clear />
    <add name="WebProjectProfileProvider" applicationName="/" type="System.Web.Profile.SqlProfileProvider" connectionStringName="Test"/>
  </providers>
</profile>

あるアプリケーションを使用してユーザーのインポートを実行し、別のアプリケーションを使用して作成したメンバーシップ、ロール、およびプロファイルを使用すると、「設定プロパティ''が見つかりませんでした」という原因になります。エラー?エラーが発生している場所と、すでに確認した最も一般的な原因のいくつかを特定できないようです。この機能を.netでこれほど大規模に使用したのはこれが初めてです。どんな助けでも大歓迎です。

ありがとう。

4

1 に答える 1

1

問題が見つかりました。問題は呼び出しコードにありました。プロファイルに関して非常に多くの問題に遭遇したため、呼び出しコードを静的メソッドに戻すのを忘れていました

ProfileCommon.GetUserProfile();

私が遭遇した他の問題は、Web 構成でプロファイルのプロパティを宣言し、それらをプロファイル共通クラスで宣言することでした。これにより、「プロパティは既に定義されています」などのフリップフロップ エラーが発生していました。および「設定プロパティ '' が見つかりませんでした。」

つまり、「Web アプリケーション」ソリューションを使用している場合は、web.config ではなく、コード内で ProfileCommon プロキシ クラスを宣言します。「Web サイト」ソリューションを使用している場合は、web.config でプロパティを宣言します。

私が Web で見つけた最良の例は、このサイトのものでした。

Web アプリケーション プロジェクトの ASP.NET プロファイル

カスタム プロファイルの使用方法を簡潔に簡潔に説明し、この方法が Web アプリケーションに対して実行される理由と、Web サイトに対して異なる方法で実行される理由を完全に説明します。これが多くの頭痛を救うことを願っています。

于 2011-11-28T16:51:46.307 に答える