6

MVC2フレームワーク上に構築されたプロジェクトでOpenId実装を備えたMembershipAPIを使用しています。ユーザー名以外に、登録時にユーザーに関連付ける他のフィールドが必要です。

よくわかりませんが、asp.netのプロファイルシステムはこのタイプの要件に合わせて構築されていると思います。また、「aspnet_profile」という名前の他のメンバーシップテーブルを含むテーブルが表示されます。

プロファイルを有効にするために、アプリケーションweb.configに次の設定を追加しました。

<profile enabled="true">
      <properties>
        <add  name="FullName" allowAnonymous="false"/>

      </properties>

    </profile>

前に述べたように、アプリケーションはユーザーに関連付けるためにいくつかの追加データを必要とするため、Membership APIを使用してユーザーを作成するときに、プロファイルテーブルにエントリを作成するためのコードをさらに数行追加しました

System.Web.Security.MembershipCreateStatus status = MembershipService.CreateUser(userModel.UserName, userModel.Password, userModel.UserName);

                   if (status == System.Web.Security.MembershipCreateStatus.Success)
                   {
                       FormsService.SignIn(userModel.UserName, true);
                       Session["Username"] = userModel.UserName;

                       dynamic profile = ProfileBase.Create(MembershipService.GetUser(userModel.UserName).UserName);
                       profile.FullName = userModel.UserFullName;
                       profile.Save();

                       RedirectToAction("Tech", "Home");



                   }

しかし、データベースのaspnet_profileテーブルに追加された行はありません。また、これがデフォルトのメンバーシップデータと一緒に追加データを追加するための好ましい方法であるかどうかを尋ねたいと思いました

4

3 に答える 3

4

web.configのデフォルトのプロファイルプロバイダー名に関連するいくつかの変更を加えることで、これを機能させました。

<profile enabled="true" defaultProvider="AspNetSqlProfileProvider">
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider" applicationName="/" connectionStringName="ApplicationServices" type="System.Web.Profile.SqlProfileProvider" />
      </providers>

      <properties>
        <add  name="FullName" allowAnonymous="false"/>

      </properties>

    </profile>

また、ProfileBase.Create関数の呼び出しとProfile.FullNameの設定の間にもう1行追加しました。

profile.Initialize(userModel.userName, true);

ついに、新しく登録されたユーザーのaspnet_profileテーブルにエントリが表示されました:)

于 2011-10-21T16:43:12.283 に答える
1

1、プロファイル構造を定義するためにプロファイルクラスを作成する必要があります

2、web.configでプロファイル設定を次のように構成する必要があります

3、これでコードを使用できるようになりました。

使用する前に、最初の2つの手順を実行する必要があります。

参照:http ://weblogs.asp.net/jgalloway/archive/2008/01/19/writing-a-custom-asp-net-profile-class.aspx

于 2011-10-21T05:03:23.017 に答える
1

ASP.NETプロファイルプロバイダーを使用している場合、プロファイルプロパティはユーザープロファイルをカスタマイズする方法です。ただし、プロファイルインスタンスを自分で作成して保存する必要はありません。これは、ASp.NETランタイム自体によって行われます。HttpContext.Current.Profileを使用するか、ページ自体から強く型付けされた動的Profileプロパティを使用します。後で使用することで、次のようなコードを書くことができます

Profile.UserName = "User Name"; 

Saveメソッドを呼び出す必要はありません。詳細については、この記事を参照してください。

Webアプリケーションでは、動的に作成されたProfileクラスを実際に参照することはできないため、操作する必要があります(もちろん、自分で行ったように、より読みやすいコードHttpContext.Current.Profileの変数に割り当てることができます)。dynamic別の方法は、独自のクラスを作成することです。

于 2011-10-21T05:06:18.897 に答える