ASP.NET 默认 _LoginPartial 视图的微小变化不起作用
A minor change in ASP.NET default _LoginPartial view not working
在我使用 Individual User Accounts
的 ASP.NET 核心项目中,我通过添加角色检查来显示 Register
link(默认情况下, 显示在右上角)仅当用户登录并处于管理员角色时显示,以便只有管理员在登录后才能将其他用户也添加到系统中。但是由于某种原因,即使您以 AdminRole
中的管理员身份登录,以下部分也不会显示 Register
link。我已经通过放置一个断点来检查 User.IsInRole("AdminRole")
的计算结果为 true:
_LoginPartial:
@model ABCTest.Models.ABCTest.CurrentYear
@using Microsoft.AspNetCore.Identity
@using ABCTest.Models
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
@if (SignInManager.IsSignedIn(User))
{
<form asp-area="" asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm">
<ul class="nav navbar-nav navbar-left">
<li><a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Welcome @UserManager.GetUserName(User), you are working with year @Model.CurrentYr - @(@Model.CurrentYr + 1)</a></li>
</ul>
<ul class="navbar-right" style="list-style:none;">
@{bool bTest = User.IsInRole("AdminRole");
if (bTest)
{
<li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li>
}
}
<li><button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button></li>
</ul>
</form>
}
else
{
<ul class="nav navbar-nav navbar-right">
<li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li>
</ul>
}
即使登录用户处于 AdminRole 也不会显示的部分:
@{bool bTest = User.IsInRole("AdminRole");
if (bTest)
{
<li><a asp-area="" asp-controller="Account" asp-action="Register">Add User</a></li>
}
}
更新
- 我已验证用户 Admin 在
AdminRole
- 当我单步执行代码时,它会将我带到工具提示显示为
true
的 if (bTest)
部分,之后我可以看到光标转到 if 语句的 {
部分但随后它跳转到 if 语句的 }
部分。但这可能正在发生,因为 <li>....<\li>
里面没有 c# 代码。
更新 2:
即使我将 if(bTest){...}
硬编码为 if(true){...}
,该应用程序也不会显示 Register
link。 所以,我认为问题的症结在于:为什么应用会忽略 if statement
中的 Register
link
最初我认为这与代码块中的内容有关,如果没有显式 @ 符号则无法呈现。但是 html 标签不应该发生这种情况。
然后我认为标签可能已经呈现并被某种样式隐藏,或者由于导航栏结构不正确而没有显示。原来它被 OP 案例的徽标图像隐藏了。
在我使用 Individual User Accounts
的 ASP.NET 核心项目中,我通过添加角色检查来显示 Register
link(默认情况下, 显示在右上角)仅当用户登录并处于管理员角色时显示,以便只有管理员在登录后才能将其他用户也添加到系统中。但是由于某种原因,即使您以 AdminRole
中的管理员身份登录,以下部分也不会显示 Register
link。我已经通过放置一个断点来检查 User.IsInRole("AdminRole")
的计算结果为 true:
_LoginPartial:
@model ABCTest.Models.ABCTest.CurrentYear
@using Microsoft.AspNetCore.Identity
@using ABCTest.Models
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager
@if (SignInManager.IsSignedIn(User))
{
<form asp-area="" asp-controller="Account" asp-action="LogOff" method="post" id="logoutForm">
<ul class="nav navbar-nav navbar-left">
<li><a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">Welcome @UserManager.GetUserName(User), you are working with year @Model.CurrentYr - @(@Model.CurrentYr + 1)</a></li>
</ul>
<ul class="navbar-right" style="list-style:none;">
@{bool bTest = User.IsInRole("AdminRole");
if (bTest)
{
<li><a asp-area="" asp-controller="Account" asp-action="Register">Register</a></li>
}
}
<li><button type="submit" class="btn btn-link navbar-btn navbar-link">Log off</button></li>
</ul>
</form>
}
else
{
<ul class="nav navbar-nav navbar-right">
<li><a asp-area="" asp-controller="Account" asp-action="Login">Log in</a></li>
</ul>
}
即使登录用户处于 AdminRole 也不会显示的部分:
@{bool bTest = User.IsInRole("AdminRole");
if (bTest)
{
<li><a asp-area="" asp-controller="Account" asp-action="Register">Add User</a></li>
}
}
更新
- 我已验证用户 Admin 在
AdminRole
- 当我单步执行代码时,它会将我带到工具提示显示为
true
的if (bTest)
部分,之后我可以看到光标转到 if 语句的{
部分但随后它跳转到 if 语句的}
部分。但这可能正在发生,因为<li>....<\li>
里面没有 c# 代码。
更新 2:
即使我将 if(bTest){...}
硬编码为 if(true){...}
,该应用程序也不会显示 Register
link。 所以,我认为问题的症结在于:为什么应用会忽略 if statement
Register
link
最初我认为这与代码块中的内容有关,如果没有显式 @ 符号则无法呈现。但是 html 标签不应该发生这种情况。
然后我认为标签可能已经呈现并被某种样式隐藏,或者由于导航栏结构不正确而没有显示。原来它被 OP 案例的徽标图像隐藏了。