1

私はみんな、

登録ページに 1 つ以上のフィールドを追加したいと考えています。Membership.CreateUser() メソッドの引数に新しいフィールドを追加しようとしましたが、8 個を超える引数をサポートしていないことがわかりました。私に何ができる ?独自のカスタム プロバイダーを開発しますか? 他の解決策やトリックはありませんか?

私の英語ですみません。私は asp で始めます。ありがとう

4

4 に答える 4

2

User テーブルにフィールドを追加するために、カスタム プロバイダーを作成する必要はありません (ただし、必須ではありません)。

ユーザー テーブルにフィールドを追加するには、SQL Server Management Studio に移動し、aspnetdb を見つけて展開します。[テーブル] を展開し、[ユーザー] を右クリックします。[デザイン] を選択し、必要なフィールドを追加して、[保存] をクリックします。それでおしまい!

編集: プロファイルの実装


さて、ユーザーに 2 つのプロファイル属性を追加すると仮定しましょう: FirstName と LastName の両方の文字列 (またはデータベース用語では nvarchar)

Web.Config (名前と種類は既定値です。aspnetdb の接続文字列を設定する必要があります)

<profile>
      <providers>
        <clear/>
        <add name="AspNetSqlProfileProvider"
             type="System.Web.Profile.SqlProfileProvider"
             connectionStringName="ApplicationServices"
             applicationName="/"/>
      </providers>
      <properties>
        <add name="FirstName" type="string"/>
        <add name="LastName" type="string"/>
      </properties>
    </profile>

これで、プロファイル プロバイダーが構成され、プロパティが定義されたので、ProfileBaseクラスを介してそれらを操作できます。たとえば、新しいユーザーがサイトに登録するときに、Membership.CreateUser に必要なユーザー名とパスワードに加えて、ユーザーに姓名の入力を求めることができます。フォームがサーバーにポストされたら、次のように処理します。

[HttpPost]
        public ActionResult CreateUser( ViewModel viewModel )
        {
            if (ModelState.IsValid)
            {
                    MembershipCreateStatus status;
                    var newUser = Membership.CreateUser( viewModel.UserName, viewModel.Password, viewModel.EmailAddress, null, null, true, null, out status );
                    if (status == MembershipCreateStatus.Success)
                    {
                        //set profile data
                        ProfileBase profile = ProfileBase.Create(viewModel.UserName);
                        profile["FirstName"] = viewModel.FirstName;
                        profile["LastName"] = viewModel.LastName;
                        profile.Save();
                    }

プロファイル データの編集は、プロファイル データの作成と同じです。

ユーザーのプロファイル データを取得するのも簡単です。

var profile = ProfileBase.Create(userName);
var firstName = profile["FirstName"] as string;
var lastName = profile["LastName"] as string;

これがあなたの前進に役立つことを願っています!

于 2012-08-28T13:58:13.320 に答える
1

正確には、メンバーシッププロバイダーをカスタマイズする必要があります

私は働いた、あなたはこの記事を読むことができます: http://www.codeproject.com/Articles/165159/Custom-Membership-Providers

彼は私の仕事を手伝ってくれる

于 2012-08-28T13:33:06.803 に答える
1

UserDetailなどの新しいテーブルを作成し、このテーブルとの間で読み取り/書き込みを行うための独自のクエリを作成することをお勧めします。したがってMembership.CreateUser()、ユーザーが作成されているかどうかを呼び出した後、カスタム データをカスタム テーブルに挿入します。

独自のカスタム メンバーシップ プロバイダーを作成することもできますが、私の意見では、これは価値があるよりも面倒です。

于 2012-08-28T13:35:38.067 に答える
0
var profile = ProfileBase.Create(userName);
var firstName = profile["FirstName"] as string;
var lastName = profile["LastName"] as string;

このコードはどこに置きましたか?

于 2012-09-24T18:52:10.263 に答える