从ASP.Net登录控件LoggedIn事件获取用户ID

从ASP.Net登录控件LoggedIn事件获取用户ID,asp.net,login,userid,Asp.net,Login,Userid,在ASP.Net中,我试图在登录控件的LoggedIn事件中获取刚刚登录的用户的用户ID(即用户GUID)。也就是说,我想在用户移动到下一页之前获取用户ID。这是我正在使用的代码: Protected Sub Login1_LoggedIn(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Login1.LoggedIn Dim UserId As String UserId = Membershi

在ASP.Net中,我试图在登录控件的LoggedIn事件中获取刚刚登录的用户的用户ID(即用户GUID)。也就是说,我想在用户移动到下一页之前获取用户ID。这是我正在使用的代码:

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
但是,我得到一个“对象引用未设置为对象实例”错误。当我在后续页面中使用该代码时,当登录用户访问这些页面时,该代码也能正常工作

有这个问题的答案,如ASP.NET论坛上的中所述:

LoggedIn事件立即触发 用户使用登录后 登录控件--但不是在 下一个对站点的请求。像这样的 用户对象尚未填写

如果您将代码更改为以下内容:

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

它应该很好用。调用
Membership.GetUser
而不将用户名作为参数传递,将期望获取“当前”登录用户。当然,由于上述原因,
用户
对象尚未填充,因此此操作失败。通过将
Login
控件的
UserName
属性作为参数传递给
GetUser()
方法,可以显式强制
Membership.GetUser
方法从用户存储(即数据库)中检索按名称指定的用户。这确保
Membership.GetUser
方法返回一个有效的
MembershipUser
对象,该对象允许您访问
ProviderUserKey
属性。

不应该是Membership.GetUser().ProviderUserKey.ToString()?@pmarflee-这是VB.NET。GetUser之后的()是可选的。(ToString之后的()也是如此)@命题乔:如果这个答案是你问题的解决方案,你应该把它标记为接受!谢谢