То, что сказал @rdhainaut, работает нормально, если вы просто хотите отобразить имя пользователя в представлении.Если это все, что вам нужно, вы даже можете использовать следующее без необходимости что-либо вводить!
@if (User.Identity.IsAuthenticated)
{
<div>Hello, @User.Identity.Name</div>
}
Причина в том, что при конфигурации по умолчанию (при условии, что вы используете имя пользователя) имя пользователя хранится в@User.Identity.Name
после успешного входа.
Теперь, если вы хотите отобразить дополнительную информацию о зарегистрированном пользователе и, возможно, хотите отобразить ее в верхней части навигации вашего сайта, тогда я думаю, что использование ViewComponent
лучше!
Например, допустим, вы определили область Admin
в своем проекте MVC и хотите создать верхнюю панель навигации.
- Вы создаете сложенный файл с именем
ViewComponents
в папке Admin
. Создайте компонент вида с именем 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);
}
}
Определите модель за представлением undler ViewComponents\Models
.
public class TopNavbarViewModel
{
public string DisplayName { get; set; }
public string Email { get; set; }
public string Phone { get; set; }
}
Определите вид для компонента вида, который должен быть меньше 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>