在.NET Core MVC脚手架生成的Identity中,如何修改_loginPartial.cshtml以显示自定义用户数据而非用户名?
解决方法
没问题,我来一步步帮你搞定这个需求:
首先,你需要调整视图里注入的UserManager和SignInManager的泛型类型——因为现在你的用户实体是自定义的ApplicationUser,而不是默认的IdentityUser,必须匹配类型才能访问自定义属性。
然后,通过异步方法获取当前登录的ApplicationUser实例,就能拿到你添加的FirstName属性了。
修改后的完整_LoginPartial.cshtml代码:
@using Microsoft.AspNetCore.Identity @using MonitoringFinances.Models <!-- 记得引入ApplicationUser所在的命名空间 --> @inject SignInManager<ApplicationUser> SignInManager @inject UserManager<ApplicationUser> UserManager <ul class="navbar-nav"> @if (SignInManager.IsSignedIn(User)) { @{ // 异步获取当前登录的自定义用户实例 var currentUser = await UserManager.GetUserAsync(User); } <li class="nav-item"> <a id="manage" class="nav-link text-dark" asp-area="Identity" asp-page="/Account/Manage/Index" title="Manage"> <!-- 加个空值判断,避免FirstName为空时页面报错 --> Hello @(currentUser?.FirstName ?? 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>
额外检查项:
确保你在项目的服务配置文件(比如Program.cs)中,已经正确配置Identity使用自定义的ApplicationUser,示例代码如下:
builder.Services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>();
内容的提问来源于stack exchange,提问作者Bipal Goyal
相关产品推荐
相关产品推荐

