我将ApplicationUser
类扩展为另外两个属性,FirstName
和LastName
。这两个属性都在数据库中正确保留。
public class ApplicationUser : IdentityUser
{
[Required]
[StringLength(100)]
public string FirstName { get; set; }
[Required]
[StringLength(100)]
public string LastName { get; set; }
}
我正在关注一个简单的初学者示例,所讨论的代码是由New Project with User Authentication命令生成的:
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
@if (SignInManager.IsSignedIn(User))
{
<form asp-area="" asp-controller="Account" asp-action="Logout" 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 out</button>
</li>
</ul>
</form>
}
而不是Hello @UserManager.GetUserName(User)!
我想说Hello ???????.FirstName!
我找不到从视图中访问这些额外属性的方法。有关如何做到这一点的任何建议吗?
谢谢!
答案 0 :(得分:8)
您需要在服务中注入UserManager(或在您的案例中查看)。这有一个泛型类型参数,在您的情况下为ApplicationUser
:
UserManager<ApplicationUser> userManager;
然后,您可以通过UserManager.Users属性查询用户。
或者,如果您需要获取当前用户并拥有ClaimsPrincipal
,则可以使用以下代码检索相应的ApplicationUser
:
ApplicationUser user = await UserManager.GetUserAsync(claimsPrincipal);
string firstName = user.FirstName;
虽然我(个人)对此并不那么热衷,但.Net Core使用以下语法支持injection into views。
@inject UserManager<ApplicstionUser> UserManager