获取 ASP.NET 身份中关联用户的角色列表
Get role list with associated users in ASP.NET Identity
我有一个角色。如何找到具有该角色的用户列表?
public ViewResult Index()
{
return View(roleManager.RoleList.ToList());
}
在这种方法中,我获取角色列表,那里有用户的 UsersId
。现在如何用我的UserModel
来link取UserName
呢?
我对LINQ不是很好,找不到好的idea
在结果中我想在视图
中创建一个 table
foreach (RoleModel role in Model)
{
<tr>
<td>@role.Id</td>
<td>@role.Name</td>
<td>@role.Description</td>
<td>
@if (role.Users == null || role.Users.Count == 0)
{
@: Нет пользователей в этой роли
}
else
{
//User name which have that role
}
</td>
</tr>
}
这是 ASP.NET Identity 的错误设计之一,即没有获取 Roles[=23] 列表的捷径=] 及其关联的 用户 。但您可以通过以下额外努力获得:
public class RoleViewModel
{
public string RoleId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<UserViewModel> Users { get; set; }
}
public class UserViewModel
{
public string UserId { get; set; }
public string UserName { get; set; }
}
public ViewResult Index()
{
List<RoleViewModel> rolesWithUsers = new List<RoleViewModel>();
List<ApplicationRole> applicationRoles = RoleManager.Roles.Include(r => r.Users).ToList();
foreach (ApplicationRole applicationRole in applicationRoles)
{
RoleViewModel roleViewModel = new RoleViewModel()
{
RoleId = applicationRole.Id,
Name = applicationRole.Name,
Description = applicationRole.Description
};
List<UserViewModel> usersByRole = UserManager.Users.Where(u => u.Roles.Any(r => r.RoleId == applicationRole.Id))
.Select(u => new UserViewModel
{
UserId = u.Id,
UserName = u.UserName
}).ToList();
roleViewModel.Users = usersByRole;
rolesWithUsers.Add(roleViewModel);
}
return View(rolesWithUsers);
}
现在每个角色都有其关联的用户。
注意:从性能的角度来看,上述解决方案不是一个好的选择。这就是为什么最好将 ASP.NET 身份 实体与您自己的 DbContext
一起使用而不是默认的 IdenityStote
.
我有一个角色。如何找到具有该角色的用户列表?
public ViewResult Index()
{
return View(roleManager.RoleList.ToList());
}
在这种方法中,我获取角色列表,那里有用户的 UsersId
。现在如何用我的UserModel
来link取UserName
呢?
我对LINQ不是很好,找不到好的idea
在结果中我想在视图
中创建一个 tableforeach (RoleModel role in Model)
{
<tr>
<td>@role.Id</td>
<td>@role.Name</td>
<td>@role.Description</td>
<td>
@if (role.Users == null || role.Users.Count == 0)
{
@: Нет пользователей в этой роли
}
else
{
//User name which have that role
}
</td>
</tr>
}
这是 ASP.NET Identity 的错误设计之一,即没有获取 Roles[=23] 列表的捷径=] 及其关联的 用户 。但您可以通过以下额外努力获得:
public class RoleViewModel
{
public string RoleId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<UserViewModel> Users { get; set; }
}
public class UserViewModel
{
public string UserId { get; set; }
public string UserName { get; set; }
}
public ViewResult Index()
{
List<RoleViewModel> rolesWithUsers = new List<RoleViewModel>();
List<ApplicationRole> applicationRoles = RoleManager.Roles.Include(r => r.Users).ToList();
foreach (ApplicationRole applicationRole in applicationRoles)
{
RoleViewModel roleViewModel = new RoleViewModel()
{
RoleId = applicationRole.Id,
Name = applicationRole.Name,
Description = applicationRole.Description
};
List<UserViewModel> usersByRole = UserManager.Users.Where(u => u.Roles.Any(r => r.RoleId == applicationRole.Id))
.Select(u => new UserViewModel
{
UserId = u.Id,
UserName = u.UserName
}).ToList();
roleViewModel.Users = usersByRole;
rolesWithUsers.Add(roleViewModel);
}
return View(rolesWithUsers);
}
现在每个角色都有其关联的用户。
注意:从性能的角度来看,上述解决方案不是一个好的选择。这就是为什么最好将 ASP.NET 身份 实体与您自己的 DbContext
一起使用而不是默认的 IdenityStote
.