我是.NET的新手,试图获取所有注册用户的列表及其角色名称,并使用viewModel将它们发送到视图。
这是ViewModel:
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<style type="text/css">
table {
width: 200px;
height: 200px;
background-color: blue;
text-align: center;
}
td {
background-color: yellow;
}
input {
width: 50px;
height: 50px;
vertical-align: middle;
}
label {
vertical-align: middle;
}
</style>
<table>
<tr>
<td>
<input type="checkbox" name="" id="c1">
<label for="c1">FFFF</label>
</td>
</tr>
</table>
</body>
</html>
我尝试了这个以获取所有用户及其角色,并为每个用户创建一个ViewModel,并将所有视图模型放在一个列表中以传递给View:
public class ApplicationUserListViewModel
{
[Display(Name = "User Email Address")]
public string UserEmail { get; set; }
public List<IdentityUserRole<string>> Roles { get; set; }
}
但是当我明确地为每个用户分配角色时,这总是为每个用户提供0个角色。
答案 0 :(得分:10)
您自己解决了,但您的解决方案并不完美,因为它会导致性能问题。您正在向数据库执行一个请求以查询用户,然后在foreach
循环中为每个用户执行新查询以获取其相关角色,这非常糟糕。如果您的数据库中有X用户,您最终将使用:
您可以通过在一个查询中包含相关角色来做得更好,如下所示:
foreach (var user in _userManager.Users.Include(u => u.Roles).ToList())
{
list.Add(new ApplicationUserListViewModel {
UserEmail = user.Email,
Roles = user.Roles
});
}
或者只是这个:
var users = _userManager.Users.Include(u => u.Roles)
.Select(u => new ApplicationUserListViewModel {
UserEmail = user.Email,
Roles = user.Roles
})
.ToList();
此解决方案对于ASP.NET Core Identity 2.x无效,因为IdentityUser
不再包含Roles
属性。有关ASP.NET Core Identity 2.x的信息,请参阅this answer。
答案 1 :(得分:2)
嗯,我得到了这个工作。这可能不是应该怎么做但它运作正常。
Start