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

2023-12-07

在 ASP.Net 中,我试图在登录控件的 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

但是,我收到“对象引用未设置到对象实例”错误。当登录用户访问这些页面时,当我在后续页面中使用相同的代码时,它效果很好。


ScottGu有这个问题的答案,如所解释的这篇博文在 ASP.NET 论坛上:

LoggedIn 事件立即触发 用户登录后 登录控制——但不是之前 向该站点发出下一个请求。像这样, User 对象尚未填写。

如果您将代码更改为:

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

它应该工作正常。呼唤Membership.GetUser如果不将用户名作为参数传递,则将期望获取“当前”登录用户。当然,由于上述原因,这失败了User对象尚未填充。通过通过Login控制的UserName属性作为参数GetUser()方法,你明确地强制Membership.GetUser从用户存储(即数据库)中检索按名称指定的用户的方法。这确保了Membership.GetUser方法返回一个有效的MembershipUser允许您访问的对象ProviderUserKey财产。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 ASP.Net 登录控件 LoggedIn 事件获取 UserID 的相关文章

随机推荐