使用 asp-page TagHelper时,我有一个页面无法在HTML中呈现链接。我以前见过这个,但这是由于一个错字或页面不存在。
在下面的_Layout中的两个链接中,
http://localhost/ReportGroups/Admin/Users
http://localhost/ReportGroups
_Layout.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>
}
}
RoleList.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>
RoleList.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
答案 0 :(得分:2)
它不起作用的原因是您尚未定义roleId和userId值。将您的链接更改为以下内容:
<a asp-page="/Admin/RoleList" asp-route-roleId="YourRoleID" asp-route-userId="YourUserID"> Roles</a>
答案 1 :(得分:1)
我正在使用.NET Core 2.2,并且遇到了类似的问题。我通过使用
对其进行了修复asp-page="/ThePage/Index"
代替
asp-page="/ThePage"
这可能掩盖了另一个根本问题。
答案 2 :(得分:0)
就我而言,我忘记在页面顶部添加@page
指令:
@page
<h1>Hello, world!</h1>
答案 3 :(得分:0)
将此代码包含在您当前的 _ViewImports.cshtml 中,帮我解决!
@addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers