从 Core 2 中的视图访问自定义应用程序用户属性 ASP.net



>我扩展了ApplicationUser类,具有 2 个额外的属性,FirstNameLastName 。这两个属性都正确保留在数据库中。

public class ApplicationUser : IdentityUser
{
    [Required]
    [StringLength(100)]
    public string FirstName { get; set; }
    [Required]
    [StringLength(100)]
    public string LastName { get; set; }
}

我遵循一个简单的初学者示例,有问题的代码由"使用用户身份验证新建项目"命令生成:

@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!

我找不到从视图中访问这些额外属性的方法。关于如何做到这一点的任何建议?

谢谢!

您需要将

UserManager注入到您的服务(或视图)中。这有一个泛型类型参数,在您的情况下ApplicationUser

UserManager<ApplicationUser> userManager;

然后,可以通过 UserManager.Users 属性查询用户。或者,如果您需要获取当前用户并拥有其ClaimsPrincipal则可以使用以下代码来检索相应的ApplicationUser

ApplicationUser user = await UserManager.GetUserAsync(claimsPrincipal);
string firstName = user.FirstName;

虽然我(个人)不太热衷于它,但.Net Core支持使用以下语法注入到视图中。

@inject UserManager<ApplicstionUser> UserManager

相关内容

  • 没有找到相关文章

最新更新