4

ASP.Net CreateUserWizard で新規登録ユーザーのユーザー ID を取得するにはどうすればよいですか?

新しいユーザーがユーザーの作成ウィザードに登録できるページがあります。ユーザーが作成された直後に、新しいユーザーのユーザー ID と電子メールを使用して、顧客の詳細テーブルに行を挿入したいと考えています。

CreateUserWizard1_CreatedUser にコードを入れて、ユーザー ID を取得しようとしました。しかし、私が学んだことから、ユーザーはこの時点で作成されます。ただし、この時点ではユーザーはログインしていません。というエラーが表示されます...

「NullReferenceException」はユーザー コードによって処理されました。オブジェクトがオブジェクトのインスタンスに設定されていません。」

デバッグ中にブレークポイントを設定すると、customerId の値が null であることがわかります。

MSDN サイトで読んだところによると、CreatedUser イベント... 「メンバーシップ プロバイダーが新しい Web サイト ユーザー アカウントを作成した後に発生します。」

ユーザーの作成ウィザードが [続行] ボタンを表示するように変更される前に、顧客の詳細テーブルに行を追加したいと考えています。その時点で、ユーザーは他のページに移動するか、アプリケーションを閉じることができます。

CreatedUser の後にコードを配置できる他のイベントはありますか? Unload イベントがあることがわかりました。 http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.createuserwizard_events%28v=vs.110%29.aspx

CreatedUser イベントでユーザーにログインして、ユーザー ID を取得することはできますか?


動作していない登録ページのコードは次のとおりです。エラーは次のコード行で発生します: "string customerId ="

    protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
    // Add the Role of Customers to the new user.
    Roles.AddUserToRole((sender as CreateUserWizard).UserName, "Customers");

    // Get the current user's ID and email
    string customerId = Membership.GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey.ToString();
    string email = Membership.GetUser(HttpContext.Current.User.Identity.Name).Email.ToString();
    bool success = CustomerDetailsAccess.CreateCustomerDetails(customerId, email);

...

}
4

1 に答える 1

5

ユーザーが登録プロセスを実行しているとき、登録してHttpContext.Current.User.Identityいるユーザーがすでにログインしていない限り、は設定されません(匿名アクセス)。

この問題を解決するには、コンテキストではなく、ウィザードからユーザー名を取得する必要があります。

この問題を修正するには、次の行を変更します。

string customerId = Membership.GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey.ToString();

これに:

string customerId = Membership.GetUser((sender as CreateUserWizard).UserName).ProviderUserKey.ToString();
于 2013-01-17T19:39:21.850 に答える