0

Я хочу получить доступ к приложению в моем представленииКомпонент. Однако это не работает как обычный класс, который наследуется от «Контроллера».Applicationuser в ViewComponent

Кто-нибудь знает, как я могу получить доступ к ApplicationUser из моего ViewComponent?

public class ProfileSmallViewComponent : ViewComponent 
{ 
    private readonly ApplicationDbContext _Context; 
    private readonly UserManager<ApplicationUser> _UserManager; 

    public ProfileSmallViewComponent(UserManager<ApplicationUser> UserManager, ApplicationDbContext Context) 
    { 
     _Context = Context; 
     _UserManager = UserManager; 
    } 

    //GET: /<controller>/ 
    public async Task<IViewComponentResult> InvokeAsync() 
    { 
     //ApplicationUser CurrentUser = _Context.Users.Where(w => w.Id == _UserManager.GetUserId(User)).FirstOrDefault(); 
    //Code here to get ApplicationUser 

     return View("Header"); 
    } 
} 
+0

«это doesn' t работает как обычный класс, который наследуется от «Controller». ». Можете ли вы более четко объяснить, почему это «не работает»? Вы получаете исключение? Если да, добавьте сведения об исключениях в свой вопрос. – Steven

ответ

1

Это работает как шарм. Вот ваш пример я просто проверял:

public class ProfileSmallViewComponent : ViewComponent 
{ 
    private readonly UserManager<ApplicationUser> _userManager; 

    public ProfileSmallViewComponent(UserManager<ApplicationUser> userManager) 
    { 
     _userManager = userManager; 
    } 

    public async Task<IViewComponentResult> InvokeAsync() 
    { 
     var users = await _userManager.Users.ToListAsync(); 
     return await Task.FromResult<IViewComponentResult>(View("Header", users)); 
    } 
} 

Кстати Если вам необходимо получить текущий пользователь, вы можете просто использовать GetUserAsync метод, нет необходимости в использование ApplicationDbContext зависимости:

ApplicationUser currentUser = await _userManager.GetUserAsync(HttpContext.User);