我使用带有MVC和razor视图的Identity 2.1.0。我的一个视图通过GET Controller Action获取所有用户的列表:
public async Task<ActionResult> Users()
{
return View(await UserManager.Users.ToListAsync());
}
View中有一个foreach,它遍历每个用户并显示常用信息,如电子邮件地址、用户名等。我想知道是否还有一种遍历每个用户角色的方法,以便我可以像这样显示每个用户的角色成员:
Customer
Employee
我还没能弄明白这个。我的部分问题是,我在剃刀视图中没有任何智能感知,并且无法在谷歌上找到任何有用的东西。
视图模型是@model IEnumerable<XXXX_My_App.Models.ApplicationUser>
。ApplicationUser有一个基类IdentityUser
最简单的方法是创建一个自定义ViewModel,其中包含用户本身和他所属的角色。实现可能如下所示:
控制器public async Task<ViewResult> Users()
{
var users = UserManager.Users;
var model = new Collection<UserRoleViewModel>();
foreach (var user in users)
{
var roles = await UserManager.GetRolesAsync(user.Id);
var rolesCollection = new Collection<IdentityRole>();
foreach (var role in roles)
{
var role = await RoleManager.FindByNameAsync(roleName);
rolesCollection.Add(role);
}
model.Add(new UserRoleViewModel { User = user, Roles = rolesCollection });
}
return View("Users", model);
}
UserRoleViewModel
public class UserRoleViewModel
{
public ApplicationUser User { get; set; }
public Collection<IdentityRole> Roles { get; set; }
}
这样,您就可以在视图中使用以下模型来遍历适当的属性
@model ICollection<YourProject.Models.UserRoleViewModel>
如果您的Usermanager返回一个identityusers列表,那么每个identityuser都应该有一个您应该能够枚举的roles属性。然而,只有当你的实现包含一个实现IRoleStore的类,但你没有提供实现的细节,所以我们只能猜测,这个才会被填充。
http://msdn.microsoft.com/en-us/library/dn613256 (v = vs.108) . aspx