2015-05-04 12 views
6

Używam MVC5, utworzonego ApplicationUser : IdentityUser z własnymi właściwościami. Teraz chcę uzyskać niestandardową właściwość (Avatar) w layout.cshtml, aby pokazać zalogowany obraz użytkownika w różnych widokach układu (nagłówek, pasek boczny). Jak mogę to zrobić?Pobierz bieżącego ApplicationUser w widoku układu

public class ApplicationUser : IdentityUser 
{ 
    public string Avatar { get; set; } 
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
    { 
     var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
     return userIdentity; 
    } 

} 

Obecnie używam @User.Identity.Name, aby uzyskać zalogowaną nazwę użytkownika w moich widokach. Chcę również obraz użytkownika.

Jak mogę to zdobyć?

+0

nie jestem pewien, ale można oddać przedmiot najpierw @ (((AppliactionUser) User.Identity) .Avatar) Rozwiązałem to, tworząc podstawowy model widoku, który zawiera w sobie moją klasę użytkownika. Używam klasy bazowej dla wielu właściwości, których używam w moim układzie. – Martin

+0

@Martin Nie działa. Zgłasza 'Nie można rzutować obiektu typu 'System.Security.Claims.ClaimsIdentity' wyjątek – SMUsamaShah

+0

Następnie utworzyłbym bazowy model widoku, którego używasz w każdej ze swoich wizualizacji. Umożliwi to dostęp do wszystkich potrzebnych właściwości na stronie układu. – Martin

Odpowiedz

7

Możesz dodać właściwość avatar jak IdentityClaim

public class ApplicationUser : IdentityUser 
{ 
    public string Avatar { get; set; } 
    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager) 
    { 
      var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
      userIdentity.AddClaim(new Claim("avatar", this.Avatar)); 
      return userIdentity; 
    } 
} 

Wewnątrz widok maszynki można go jak ten

@{ 
    var avatar = ((ClaimsIdentity)User.Identity).FindFirst("avatar"); 
} 
+2

'awatar.Value' zawiera wartość – SMUsamaShah

+1

Rozwiązało to problem w najprostszy możliwy sposób – SMUsamaShah

Powiązane problemy