使用Identity 2.1.0与MVC和razor Views。我的一个视图获得了使用此GET控制器操作的所有用户的列表:
public async Task<ActionResult> Users()
{
return View(await UserManager.Users.ToListAsync());
}
在视图中,有一个foreach遍历每个用户并显示通常的信息,如电子邮件地址,用户名等。我想知道是否还有一种方法可以迭代每个用户的角色,以便我可以显示每个用户的角色成员身份,如下所示:
Customer
Employee
我无法弄清楚这一点。我的部分问题是我在剃刀视图中没有任何Intellisense,并且无法在Google上找到任何有用的信息。
视图模型为@model IEnumerable<XXXX_My_App.Models.ApplicationUser>
。 ApplicationUser有一个基类IdentityUser。
答案 0 :(得分:5)
最简单的方法是创建一个自定义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>
答案 1 :(得分:0)
如果您的Usermanager返回了一个身份使用者列表,那么每个identityuser都应该有一个您应该能够枚举的roles属性。但是,如果您的实现包含一个实现IRoleStore的类,但您没有提供实现的详细信息,那么我们只能猜测。
http://msdn.microsoft.com/en-us/library/dn613256(v=vs.108).aspx