2009-10-21 36 views
4

在ASP.Net中,我試圖在Login控件的LoggedIn事件中獲取剛剛登錄的用戶的UserId(即用戶GUID)。也就是說,我想在用戶移到下一頁之前抓取UserId。這是我使用的代碼:從ASP.Net登錄控件LoggedIn事件獲取用戶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 

不過,我得到一個錯誤「不設置到對象的實例對象引用」。當我在後續頁面中使用它時,當登錄用戶訪問這些頁面時,此相同的代碼運行良好。

+0

不應該是Membership.GetUser()。ProviderUserKey.ToString()? – pmarflee 2009-10-21 09:39:33

+0

@pmarflee - 這是VB.NET。的getUser後的()是可選的。 (就像ToString後的())! – CraigTP 2009-10-21 09:48:34

回答

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屬性。

+0

巨大 - 完美地工作。謝謝你的幫助! – 2009-10-21 10:23:28

+1

感謝克雷格,這完美地工作對我來說也是如此。 – 2010-02-17 16:15:59

+1

@PropositionJoe:它這個答案是解決你的問題,你應該將其標記爲接受!謝謝! – Sk8erPeter 2012-05-07 17:03:29