2017-11-09 4 views
1

Ich habe eine view.cshtml, die ein @model hat .... SportTeam an der Spitze. Ich möchte nur die ID aus der AspNetUser Tabelle des aktuell angemeldeten Benutzers überprüfen.Aktuellen angemeldeten Benutzer aus einer Ansicht abrufen

Muss ich das im Controller machen und dann in die Ansicht übertragen? Oder kann ich direkt in der Ansicht nachsehen?

In der Ansicht kann ich User.Identity eingeben, aber alles, was ich nach der Identität bekomme, ist "name" und ich möchte die ID.

+0

Sie können aus Ihrer Sicht als Controller, alle den gleichen Code ausführen, was genau Sie stecken zu bleiben? Allerdings sollten Sie die Daten ohnehin vom Controller weitergeben. – DavidG

+0

@UweKeim Nun da geht meine Bearbeitung :( –

+0

Überprüfen Sie diese Frage, es könnte Ihnen helfen: https://stackoverflow.com/questions/26739778/get-userid-of-logged-in-user-in-asp-net-mvc -5 –

Antwort

4

Die folgende Methode gibt Ihnen eine eingeloggte Benutzer-ID als Zeichenfolge, und dann können Sie eine Eigenschaft in Ihrem Modell zuweisen, die diese Zeichenfolge zuweist und dann an die Ansicht übergeben.

public string GetLoggedInUserId() 
{ 
    ApplicationUser user = System.Web.HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>() 
       .FindById(System.Web.HttpContext.Current.User.Identity.GetUserId()); 
    return user.Id; 
} 

Sie erhalten folgendes importieren:

using Microsoft.AspNet.Identity.Owin; 

using Microsoft.AspNet.Identity; 
+0

Thx @ BigSmile. Ich habe eine Bearbeitung über veröffentlicht über meine View bereits beim Zurückgeben eines SportTeam-Objekts ... ie return View (sportTeam). Um also auch die user.id zur View zurückzubringen, benutze ich einfach einen Viewbag oder gibt es einen eleganteren Weg? – Mike

6

Ja, Sie können den Benutzer in der Ansicht abrufen - Sie können beliebigen Code in der Ansicht ausführen, aber Sie sollten nicht. Der ganze Sinn von MVC ist es, den Blick so dumm wie möglich zu halten. Bewegen Sie so viel Logik wie möglich in den Controller und übertragen Sie die benötigten Informationen über eine Modellklasse.

Wenn Sie MVC nicht mögen, werfen Sie einen Blick auf eine Razor-Seiten, die MVC mit nur einer Ansicht ersetzen.

+0

Angesichts der mein Controller bereits zurückgibt View (Sportteam) ist die schnellste/beste/bevorzugte Möglichkeit, die AspNetUser ID vom Controller in die Ansicht, um eine Viewbag zu verwenden? Thx. – Mike

0

Ich stimme @Christian zu. Legen Sie es in den Controller. Aber wenn Sie die Benutzer-ID auf eine einfache Weise erhalten müssen, können Sie eine Erweiterungsmethode für IIdenty hinzufügen. Wie so:

public static class IdentityExtensions 
{ 
    public static Guid GetUserId(this IIdentity identity) 
    { 
     var claim = ((ClaimsIdentity) identity).FindFirst(x => x.Type.ToLowerInvariant().Contains("nameidentifier")); 
     // Test for null to avoid issues during local testing 
     return claim != null ? Guid.Parse(claim.Value) : throw new ArgumentNullException(nameof(claim)); 
    } 
} 

Der obige Code arbeitete für mich.

Hoffe es hilft!

Verwandte Themen