Как получить Asp.net Core Identity User в поле зрения - PullRequest
0 голосов
/ 07 мая 2018

В основном проекте MVP Asp.net, как получить текущую информацию IdentityUser в View?

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

То, что сказал @rdhainaut, работает нормально, если вы просто хотите отобразить имя пользователя в представлении.Если это все, что вам нужно, вы даже можете использовать следующее без необходимости что-либо вводить!

@if (User.Identity.IsAuthenticated)
{
    <div>Hello, @User.Identity.Name</div>
}

Причина в том, что при конфигурации по умолчанию (при условии, что вы используете имя пользователя) имя пользователя хранится в@User.Identity.Name после успешного входа.

Теперь, если вы хотите отобразить дополнительную информацию о зарегистрированном пользователе и, возможно, хотите отобразить ее в верхней части навигации вашего сайта, тогда я думаю, что использование ViewComponentлучше!

Например, допустим, вы определили область Admin в своем проекте MVC и хотите создать верхнюю панель навигации.

  1. Вы создаете сложенный файл с именем ViewComponents в папке Admin.
  2. Создайте компонент вида с именем TopNavbarViewComponent.cs.

    public class TopNavbarViewComponent : ViewComponent
    {
        private readonly UserManager<IdentityUser> _userManager;
    
        // You can inject anything you want here
        public TopNavbarViewComponent(UserManager<IdentityUser> userManager)
        {
            _userManager = userManager;
        }
    
        public async Task<IViewComponentResult> InvokeAsync()
        {
            var appUser = await _userManager.FindByNameAsync(
                HttpContext.User.Identity.Name);
    
            var vm = new TopNavbarViewModel
            {
                // Just as an example... perhaps you have additional 
                // property like FirstName and LastName in your IdentityUser.
                DisplayName = appUser?.DisplayName,
                Email = appUser?.Email,
                Phone = appUser?.PhoneNumber
            };
    
            return View(vm);
        }
    }
    
  3. Определите модель за представлением undler ViewComponents\Models.

    public class TopNavbarViewModel
    {
        public string DisplayName { get; set; }
        public string Email { get; set; }
        public string Phone { get; set; }
    }
    
  4. Определите вид для компонента вида, который должен быть меньше Areas\Admin\Views\Shared\Components\TopNavbar\Default.cshtml по соглашению.

    @model Web.UI.Areas.Admin.ViewComponents.Models.TopNavbarViewModel
    
    <nav class="navbar navbar-light">
        <ul class="navbar-nav">
            <a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown">
                Hello, @Model.DisplayName
            </a>
        </ul>
    </nav>
    
0 голосов
/ 07 мая 2018

В веб-приложении asp.net core mvc 2.0 объект IdentityUser может быть непосредственно доступен в представлении с помощью следующего кода:

@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <div>Hello @UserManager.GetUserName(User)!</div>
}
...