我有一个页面在使用时不呈现 HTML 中的链接asp-page标签助手。我以前见过这个,但这是由于拼写错误或页面不存在造成的。
在下面的 _Layout 中的两个链接中,
- 用户渲染为
http://localhost/ReportGroups/Admin/Users
- 角色呈现为
http://localhost/ReportGroups
- 手动导航到角色会导致 404 错误。
_布局.cshtml
该链接是管理菜单的一部分。注释掉的 FontAwesome 图标是我测试的一部分。/Admin/Users
工作正常,但是/Admin/RoleList
不起作用。之前是/Admin/Roles
但我分部分构建了该文件的新副本,以查看是否有任何内容引发错误,或者它是否是保留字。
@if (User.Identity.IsAuthenticated)
{
if (User.IsInRole("Admin"))
{
<div id="nav-admin">
<ul>
<li><a asp-page="/Admin/Users"> Users</a></li>@*< i class="fas fa-user-secret" title="Users"></i>*@
<li><a asp-page="/Admin/RoleList"> Roles</a></li>
@*<i class="fas fa-id-card" title="Roles"></i>*@
</ul>
</div>
}
}
角色列表.cshtml
@page "{roleId}/{userId}"
@model RoleListModel
@{
ViewData["PageTitle"] = "Admin Tools - Roles";
ViewData["IconClass"] = "";
ViewData["IconTitle"] = "Roles";
}
<table>
<thead>
<tr>
<th>Role</th>
<th>User Name</th>
<th>First Name</th>
<th>Last Name</th>
<th> </th>
</tr>
</thead>
<tbody>
@foreach (ApplicationRole role in Model.AppRoles)
{
<tr>
<td colspan="4"><strong>@role.Name</strong></td>
<td>
<a asp-page="/App/RoleEdit" asp-route-roleId="@role.Id"><i class="fas fa-edit"></i></a>
</td>
</tr>
IList<ApplicationUser> usersOfRole = Model.AppRoleUsersDict[role];
foreach (ApplicationUser user in usersOfRole)
{
<tr>
<td>@role.Name</td>
<td>@user.UserName</td>
<td>@user.FirstName</td>
<td>@user.LastName</td>
<td>
<form method="post" asp-page-handler="delete">
<button type="submit" asp-page="/App/GroupEdit" asp-page-handler="delete" asp-route-roleId="@role.Id" asp-route-userId="@user.Id">
<i class="fas fa-trash-alt" style="color:red"></i>
</button>
</form>
</td>
</tr>
}
}
</tbody>
</table>
角色列表.cshtml.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Ctrack.ReportGroups.Data;
using Ctrack.ReportGroups.Identity;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace Ctrack.ReportGroups.Pages
{
public class RoleListModel : PageModel
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<ApplicationRole> _roleManager;
private readonly ApplicationDbContext _db;
public RoleListModel(
ApplicationDbContext db,
UserManager<ApplicationUser> userManager,
RoleManager<ApplicationRole> roleManager)
{
_db = db;
_userManager = userManager;
_roleManager = roleManager;
}
public IList<ApplicationRole> AppRoles { get; set; }
public IDictionary<ApplicationRole, IList<ApplicationUser>> AppRoleUsersDict { get; set; }
/// <summary>
/// List all Roles, and the Users assigned to them. Exposes a form to delete the relationship for each user.
/// </summary>
/// <returns>Task>IActionResult></returns>
public async Task<IActionResult> OnGetAsync()
{
AppRoles = _roleManager.Roles.ToList();
AppRoleUsersDict = new Dictionary<ApplicationRole, IList<ApplicationUser>>();
foreach (ApplicationRole role in AppRoles)
{
IList<ApplicationUser> usersOfRole = await _userManager.GetUsersInRoleAsync(role.Name);
AppRoleUsersDict.Add(role, usersOfRole);
}
return Page();
}
/// <summary>
/// Removes a role from a User
/// </summary>
/// <param name="roleId"><see langword="string"/> containing RoleId</param>
/// <param name="userId"><see langword="string"/> containing UserId</param>
/// <returns>Task>IActionResult></returns>
public async Task<IActionResult> OnPostDeleteAsync(string roleId, string userId)
{
ApplicationUser user = await _userManager.FindByIdAsync(userId);
ApplicationRole role = await _roleManager.FindByIdAsync(roleId);
try
{
await _userManager.RemoveFromRoleAsync(user, role.Name);
TempData["Notification"] = $"Successfully removed Role {role.Name} from User {user.UserName}.";
}
catch (Exception ex)
{
TempData["ErrorMessage"] = $"Exception {ex.GetType()} encountered while removing Role {role.Name} from User {user.UserName}.";
}
return Page();
}
}
}
_ViewImports.cshtml
@using Microsoft.AspNetCore.Identity
@using CtrackReportGroupsRtca
@using Ctrack.ReportGroups.Data
@using Ctrack.ReportGroups.Identity
@using System.Security.Claims
@using Microsoft.AspNetCore.Html;
@namespace Ctrack.ReportGroups.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers