首页 > 解决方案 > 如何修改 _loginPartial.cshtml 以显示自定义用户数据而不是 UserName?

问题描述

我有一个 .NET Core MVC,我在其中搭建了 Identity。现在,我创建了一个派生自 IdentityUser 类的 ApplicationUser 类,并在其中添加了我的属性,如下所示:

    namespace MonitoringFinances.Models 
{
    public class ApplicationUser : IdentityUser
    {
        [PersonalData]
        public string FirstName { get; set; }
        
        [PersonalData]
        public string LastName { get; set; }
    }
}

现在,在下面显示的生成的 _loginPartial.cshtml 视图中,我想显示 Hello @FirstName!而不是你好@userName!。

@using Microsoft.AspNetCore.Identity

@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

<ul class="navbar-nav">
@if (SignInManager.IsSignedIn(User))
{
    <li class="nav-item">
        <a id="manage" class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @UserManager.GetUserName(User)!</a>
    </li>
    <li class="nav-item">
        <form id="logoutForm" class="form-inline" asp-area="Identity" asp-page="/Account/Logout" asp-route-returnUrl="@Url.Action("Index", "Home", new { area = "" })">
            <button id="logout" type="submit" class="nav-link btn btn-link text-dark">Logout</button>
        </form>
    </li>
}
else
{
    <li class="nav-item">
        <a class="nav-link text-dark" id="register" asp-area="Identity" asp-page="/Account/Register">Register</a>
    </li>
    <li class="nav-item">
        <a class="nav-link text-dark" id="login" asp-area="Identity" asp-page="/Account/Login">Login</a>
    </li>
}
</ul>

有人可以在.NET Core 中帮助这个新手吗?我将不胜感激:)

标签: asp.net-mvcasp.net-coreasp.net-identity

解决方案


我想到了!

这是我的解决方案:

    @if (SignInManager.IsSignedIn(User))
{
    ApplicationUser applicationUser = (ApplicationUser) await UserManager.GetUserAsync(User);
    var firstName = applicationUser.FirstName;
    <li class="nav-item">
        <a id="manage" class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage">Hello @firstName!</a>

我不确定这是否违反 MVC 原则,因为我在视图中做了一些轻微的代码,但它确实有效。让我知道是否有更好的解决方案。


推荐阅读