我想在我的_Layout视图的导航栏上显示当前的ApplicationUsers Firstname + Lastname.我发现你可以从当前的RenderedBody控制器传递你的viewbag,如下所示:
private readonly IHttpContextAccessor _httpContext;
private readonly UserManager<ApplicationUser> _userManager;
private readonly ApplicationUser _user;
public HomeController(IHttpContextAccessor httpContextAccessor, UserManager<ApplicationUser> userManager) {
_httpContext = httpContextAccessor;
_userManager = userManager;
_user = _userManager.Users.Single(u => u.Id == _httpContext.HttpContext.User.FindFirst(ClaimTypes.NameIdentifier).Value);
}
Run Code Online (Sandbox Code Playgroud)
在控制器中:
public IActionResult Index()
{
ViewBag.Username = $"{_user.FirstName} {_user.Surname}";
return View();
}
Run Code Online (Sandbox Code Playgroud)
最后在我的_Layout视图中:
<strong class="font-bold">@ViewBag.Username</strong>
Run Code Online (Sandbox Code Playgroud)
这种方法似乎与谷物相悖,对每一种观点来说都是一种巨大的痛苦.实现这一目标的标准是什么?
您可以将UserManager和插入SignInManager视图中。
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
Run Code Online (Sandbox Code Playgroud)
然后,您可以测试用户是否使用登录SignInManager.IsSignedIn(User)并使用显示用户名UserManager.GetUserName(User)
@if (SignInManager.IsSignedIn(User))
{
<form asp-area="" asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm" class="navbar-right">
<ul class="nav navbar-nav navbar-right">
<li>
<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
</li>
<li>
<button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button>
</li>
</ul>
</form>
}
Run Code Online (Sandbox Code Playgroud)
PS。还需要添加这两种using以及
@using Microsoft.AspNetCore.Identity
@using MyWebApp.Models
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2202 次 |
| 最近记录: |