在使用Identity and Entity Framework的ASP.NET Core/Razor页面中,我可以按如下方式查看AspNetUsers表中的所有记录:
public class ViewAspNetDataModel : PageModel
{
private readonly UserManager<ApplicationUser> userManager;
public ViewAspNetDataModel(UserManager<ApplicationUser> userManager)
{
this.userManager = userManager;
}
public IQueryable<ApplicationUser> SiteUsers { get; set; }
public void OnGet()
{
SiteUsers = userManager.Users; // Can now use @foreach (var user in Model.SiteUsers) {} in the cshtml page.
}
}
我还需要能够查看AspNetUserClaims表中的所有记录,但不知道如何做到这一点。我可以包括
IUserClaimStore<ApplicationUser> userClaims
在构造函数中,但不确定如何在Startup.cs中解决此问题,而且userClaims没有包含数据库表中所有声明的属性。获取这些数据的最佳方式是什么?感谢提供任何信息。
我现在可以回答我自己的问题,以防这对其他人有用:ApplicationDbContext有一个UserClaims属性,它包含AspNetUserClaims表中的所有声明。按如下方式填充模型属性:
public class ViewAspNetDataModel : PageModel
{
private readonly ApplicationDbContext context;
public ViewAspNetDataModel(ApplicationDbContext context)
{
this.context = context;
}
public IQueryable<IdentityUserClaim<int>> UserClaims { get; set; }
public void OnGet()
{
UserClaims = context.UserClaims;
}
}
然后在cshtml文件中,您可以使用以下内容:
<table class="table table-striped">
<thead>
<tr style="font-size:small; color:yellow; background-color:#A00000">
<th class="align-middle p-1" style="font-weight:normal">ID</th>
<th class="align-middle p-1" style="font-weight:normal">User ID</th>
<th class="align-middle p-1" style="font-weight:normal">Claim type</th>
<th class="align-middle p-1" style="font-weight:normal">Claim value</th>
</tr>
</thead>
<tbody>
@foreach (var claim in Model.UserClaims)
{
<tr style="font-size:small">
<td class="align-top p-1">@claim.Id</td>
<td class="align-top p-1">@claim.UserId</td>
<td class="align-top p-1">@claim.ClaimType</td>
<td class="align-top p-1">@claim.ClaimValue</td>
</tr>
}
</tbody>
</table>