1. ホーム
  2. asp.net

[解決済み] プロファイルの値を割り当てるには?

2022-11-13 11:03:19

質問

何が足りないのかわかりませんが、Web.config ファイルに Profile プロパティを追加しましたが、Profile にアクセスすることができません。 項目 にアクセスすることも、新しいプロファイルを作成することもできません。

どのように解決するのですか?

今日、同じ問題が発生し、多くのことを学びました。

Visual Studio には 2 種類のプロジェクトがあります -- "Web Site Projects" と "Web Application Projects." 理由は完全に謎ですが、Web Application Projects では、(1) と (2) の両方を使用することはできません。 プロファイルを使用できません。 Web.configファイルから魔法のように強く型付けされたクラスが生成されるわけではありませんので、自分でロールバックしなければなりません。

MSDN のサンプルコードでは、Web サイトプロジェクトを使用していることを想定しており、単に <profile> セクションを Web.config でパーティーをします。 Profile. プロパティ というプロパティがありますが、これはWeb Application Projectsでは機能しません。

自分でロールするために2つの選択肢があります。

(1) ウェブ・プロファイル・ビルダー . これは Visual Studio に追加するカスタムツールで、Web.config 内の定義から必要なプロファイルオブジェクトを自動的に生成します。

なぜなら、私のコードをコンパイルするためにこの余分なツールに依存させたくなかったし、他の誰かがこのツールが必要なことに気づかずに私のコードをビルドしようとしたときに、問題を引き起こす可能性があったからです。

(2) 自分自身で ProfileBase を継承した独自のクラスを作成して、カスタムプロファイルを表現します。これは見た目よりも簡単です。以下は、文字列のプロファイルフィールドを追加する非常に単純な例です。

web.config で。

<profile defaultProvider="SqlProvider" inherits="YourNamespace.AccountProfile">

<providers>
     <clear />
     <add name="SqlProvider"
          type="System.Web.Profile.SqlProfileProvider"
          connectionStringName="sqlServerMembership" />
</providers>

</profile>

AccountProfile.csというファイルに。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Profile;
using System.Web.Security;

namespace YourNamespace
{
    public class AccountProfile : ProfileBase
    {
        static public AccountProfile CurrentUser
        {
            get { return (AccountProfile)
                         (ProfileBase.Create(Membership.GetUser().UserName)); }
        }

        public string FullName
        {
            get { return ((string)(base["FullName"])); }
            set { base["FullName"] = value; Save(); }
        }

        // add additional properties here
    }
}

プロファイルの値を設定する。

AccountProfile.CurrentUser.FullName = "Snoopy";

プロファイルの値を取得する場合

string x = AccountProfile.CurrentUser.FullName;