4

ASP.Net では、Login コントロールの LoggedIn イベントで、ログオンしたばかりのユーザーの UserId (つまり、ユーザー GUID) を取得しようとしています。つまり、ユーザーが次のページに移動する前に UserId を取得したいと考えています。これは私が使用しているコードです:

Protected Sub Login1_LoggedIn(ByVal sender As Object, _
  ByVal e As System.EventArgs) Handles Login1.LoggedIn

    Dim UserId As String
    UserId = Membership.GetUser.ProviderUserKey.ToString()

End Sub

ただし、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。ログインしたユーザーがこれらのページにアクセスしているときに、この同じコードを後続のページで使用するとうまく機能します。

4

1 に答える 1

12

ASP.NET フォーラムの次のブログ投稿で説明されているように、 ScottGuにはこの問題に対する答えがあります。

LoggedIn イベントは、ユーザーがログイン コントロールでログインした直後に発生しますが、サイトへの次のリクエストの前ではありません。そのため、User オブジェクトはまだ入力されていません。

コードを次のように変更した場合:

Dim UserId As String
UserID = Membership.GetUser(Login1.UserName).ProviderUserKey.ToString()

それはうまくいくはずです。ユーザー名をパラメーターとして渡さずに呼び出すMembership.GetUserと、「現在」ログインしているユーザーを取得することが期待されます。もちろん、Userオブジェクトがまだ設定されていないため、これは上記の理由で失敗します。LoginコントロールのUserNameプロパティをパラメーターとしてメソッドに渡すことにより、ユーザー ストア (つまり、データベース) から名前で指定されたユーザーを取得するようメソッドにGetUser()明示的に強制します。Membership.GetUserこれにより、メソッドがプロパティにアクセスできるMembership.GetUser有効なオブジェクトを返すことが保証されます。MembershipUserProviderUserKey

于 2009-10-21T10:02:38.907 に答える