从ASP.Net获取UserID登录控件LoggedIn事件

时间:2009-10-21 09:27:32

标签: asp.net login userid

在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

但是,我得到一个“对象引用没有设置为对象的实例”错误。当我在后续页面中使用它时,当登录用户访问这些页面时,相同的代码也能正常工作。

1 个答案:

答案 0 :(得分:12)

ScottGu可以解决这个问题,如ASP.NET论坛的this blog post中所述:

  

LoggedIn事件立即触发   用户登录后   登录控制 - 但不是之前   下一个网站请求。因此,   用户对象尚未填写。

如果您将代码更改为:

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

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