2013-03-02 5 views
6

New MVC4 Anwendung erstellt Userprofile Tabelle:Get UserId (int) in neue MVC4 Anwendung

UserId (int) | Benutzername (nvarchar)

In Controller:

string currentUser = User.Identity.Name; // returns UserName 

    var mu1 = Membership.GetUser(); // returns null 

    var mu2 = Membership.GetUser(currentUser); // returns null as well 

las ich eine Menge Threads, und sie alle sprechen über Guid bekommen, die ich habe noch nicht einmal in Benutzer und Mitgliedschaft Tabellen.

Gibt es eine Möglichkeit, die UserId (int) des aktuell angemeldeten Benutzers zu erhalten?

+0

Warum Sie die ID brauchen? – andri

+1

@andri, um die Anzeige FK in einer anderen Tabelle zu speichern. – mishap

+0

Warum nicht den Benutzernamen als FK verwenden? Der Benutzername ist einzigartig, oder? – andri

Antwort

0

mu1 und mu2 enthalten eine Instanz MembershipUser, wenn der Benutzer erfolgreich authentifiziert wurde. MembershipUser hat eine ProviderUserKey Eigenschaft des Typs object, die die Kennung für einen Benutzer enthalten wird.

Membership.GetUser() erfordert, dass ein MembershipProvider für die Anwendung verbunden wird und der Benutzer authentifiziert wird. Da Sie sehen, null zurückgegeben, würde dies vorschlagen, dass eine der oben genannten Bedingungen nicht erfüllt ist.

3

Sie können Benutzer-ID erhalten, wie int mit

WebSecurity.GetUserId(User.Identity.Name); 

Weitere Informationen: Sie [InitializeSimpleMembership] auf der Controller-Klasse hinzufügen sollten, wenn Sie einen anderen Controller als Account verwenden.

12

Stellen Sie sicher, dass Sie oben auf Ihrem Controller [InitializeSimpleMembership] hinzufügen, damit die einfache Mitgliedschaft über die Datei InitializeSimpleMembershipAttribute.cs im Verzeichnis Filters initialisiert wird.

Dann können Sie die Benutzer-ID auf verschiedene Arten zugreifen:

int mu1 = (int)WebSecurity.CurrentUserId; 
int mu2 = (int)Membership.GetUser().ProviderUserKey; 
+0

Mein InitializeSimpleMembershipAttribute befindet sich in Filters \ InitializeSimpleMembershipAttribute, also habe ich 'recreationalServicesTicketingSystem.Filters;' oben auf meinem Controller hinzugefügt, aber mein int 'mu1 = (int) WebSecurity.CurrentUserId;' gibt mir 'Der Name 'Websecurity' existiert nicht im aktuellen Kontext. Also benutze ich 'webMatrix.WebData;' funktioniert das noch? – TykiMikk

0

Sie können Benutzer-ID erhalten

if (Request.IsAuthenticated) 
{ 
    var membership = (SimpleMembershipProvider)Membership.Provider; 
    int idUser = membership.GetUserId(User.Identity.Name); 
}