2015-05-04 6 views
6

Я использую MVC5, созданный ApplicationUser : IdentityUser с пользовательскими свойствами. Теперь я хочу получить настраиваемое свойство (Avatar) в layout.cshtml, чтобы показать зарегистрированное изображение пользователя в разных макетах (заголовке, боковой панели). Как мне это сделать?Получить текущий ApplicationUser в макете

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; 
    } 

} 

В настоящее время я использую @User.Identity.Name, чтобы получить зарегистрированное имя пользователя в моих представлениях. Я также хочу изображение пользователя.

Как я могу это получить?

+0

я не уверен, но вы можете преобразовать объект первым @ (((AppliactionUser) User.Identity) .Avatar) Я решил это, создав базовую модель представления, в которой есть мой пользовательский класс. Я использую базовый класс для нескольких свойств, которые я использую в своем макете. – Martin

+0

@Martin Не работает. Броски 'Невозможно создать объект типа 'Исправление System.Security.Claims.ClaimsIdentity' – SMUsamaShah

+0

Тогда я бы создал базовую модель просмотра, которую вы используете в каждой из ваших моделей. Это даст вам доступ ко всем вашим свойствам, которые вам нужны на вашей странице макета. – Martin

ответ

7

Вы можете добавить аватар собственности как 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; 
    } 
} 

Внутренний вид бритвы вы можете получить доступ к нему, как этому

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

'avatar.Value' содержит значение – SMUsamaShah

+1

. Это решило проблему самым простым способом – SMUsamaShah

Смежные вопросы