【发布时间】:2017-03-16 14:52:38
【问题描述】:
对于我的用户列表视图,我发送了一个 AppUser 列表:IdentityUser,如下所示:
public AccountAdminController(UserManager<AppUser> userManager,
RoleManager<IdentityRole> rolesManager)
{
_userManager = userManager;
_roleManager = rolesManager;
}
// List Users
public ViewResult Index()
{
return View(_userManager.Users);
}
我在视图中这样渲染用户:
@model IEnumerable<AppUser>
foreach (AppUser user in Model)
{
<tr>
<td>@user.Id</td>
<td>@user.UserName</td>
<td>Role</td>
<td>@user.Email</td>
<td>
<a id="editModal" data-toggle="modal" data-target="#modal_box"
class="btn btn-sm btn-primary"
asp-action="EditUser" asp-route-id="@user.Id">Edit</a>
<a id="deleteConfirmModal" data-toggle="modal" data-target="#modal_box"
class="btn btn-sm btn-danger"
asp-action="DeleteConfirm" asp-route-id="@user.Id">Delete</a>
</td>
</tr>
}
如何获取角色列中每个用户的角色?
每个用户的角色集合都是空的,计数为 0,即使我知道该用户具有角色。每个用户只有一个角色,所以我需要拉@user.Roles.FirstOrDefault().Name。
但它不存在。 我该如何解决这个问题?
更新 1
如果我使用包含来执行此操作:
public ViewResult Index()
{
return View(_userManager.Users.Include(u => u.Roles));
}
然后在视图中:
<td>@user.Roles</td>
它呈现这个:
System.Collections.Generic.List`1[Microsoft.AspNetCore.Identity.EntityFrameworkCore.IdentityUserRole`1[System.String]]
现在如果我尝试延长剃刀线:
@user.Roles.FirstOrDefault().
我在智能感知中唯一得到的是 RoleId,没有角色名称。
【问题讨论】:
-
它不会像魔术一样打开集合,你必须解开它......另一个循环......总共2个for循环。 1 代表用户,然后 1 代表每个用户的角色。
-
你可以为
asp-net-identity-2找到一个类似SQL的查询here,但同样的查询应该适用于asp.net-core-identity
标签: asp.net-identity asp.net-core-mvc