2009-10-21 10 views
4

Dans ASP.Net, j'essaie d'obtenir le UserId (c'est-à-dire le GUID de l'utilisateur) de l'utilisateur qui vient de se connecter, dans l'événement LoggedIn du contrôle Login. C'est-à-dire que je veux récupérer l'UserId avant que l'utilisateur ne soit déplacé vers la page suivante. C'est le code que j'utilise:Récupérer ID utilisateur depuis ASP.Net Contrôle de connexion événement LoggedIn

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 

Cependant, j'obtiens une erreur "Référence d'objet non définie sur une instance d'un objet". Ce même code fonctionne bien lorsque je l'utilise dans les pages suivantes, lorsqu'un utilisateur connecté accède à ces pages.

+0

Cela ne devrait-il pas être Membership.GetUser(). ProviderUserKey.ToString()? – pmarflee

+0

@pmarflee - Ceci est VB.NET. Le() après GetUser est facultatif. (Comme le() après ToString)! – CraigTP

Répondre

12

ScottGu a la réponse à ce problème, comme expliqué dans this blog post sur le forum ASP.NET:

L'événement se déclenche loggedIn immédiatement après que l'utilisateur est connecté avec le contrôle de connexion - mais pas avant la prochaine demande au site. En tant que tel, l'objet Utilisateur n'est pas encore rempli.

Si vous changez votre code à quelque chose comme:

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

Il devrait fonctionner correctement. L'appel Membership.GetUser sans passer le nom d'utilisateur en tant que paramètre s'attendra à saisir l'utilisateur connecté "en cours". Bien sûr, cela échoue pour les raisons ci-dessus car l'objet User n'est pas encore rempli. En transmettant la propriété UserName du contrôle en tant que paramètre à la méthode GetUser(), vous forcez explicitement la méthode Membership.GetUser à extraire l'utilisateur tel que spécifié par le nom du magasin de l'utilisateur (c'est-à-dire la base de données). Cela garantit que la méthode Membership.GetUser renvoie un objet MembershipUser valide qui vous permet d'accéder à la propriété ProviderUserKey.

+0

Tremendous - travaillé parfaitement. Merci de votre aide! –

+1

Merci Craig, cela a fonctionné parfaitement pour moi aussi. –

+1

@PropositionJoe: cette réponse était la solution à votre problème, vous devriez la marquer comme acceptée! Merci! – Sk8erPeter

Questions connexes