ASP.NET MVC 5从特定角色获取用户

如何显示特定角色中所有用户的列表。

我将IdentityRole模型附加到我的View,并为其分配了“Admin”角色。 到目前为止我只能得到UserId。

@model Microsoft.AspNet.Identity.EntityFramework.IdentityRole @Html.DisplayNameFor(model => model.Name) // Shows 'Admin' @foreach (var item in Model.Users) {   @Html.DisplayFor(modelItem => item.UserId)   } 

一种可能的解决方案是在控制器中创建用户列表并将其附加到视图。 问题是我还需要角色本身的数据。

如果您使用的是ASP.NET Identity 2:

 public ActionResult UserList(string roleName) { var context = new ApplicationDbContext(); var users = from u in context.Users where u.Roles.Any(r => r.Role.Name == roleName) select u; ViewBag.RoleName = roleName; return View(users); } 

在视图中:

 @model Microsoft.AspNet.Identity.EntityFramework.IdentityUser // or ApplicationUser @Html.DisplayNameFor(model => ViewBag.RoleName) // Shows 'Admin' @foreach (var item in Model.Users) {   @Html.DisplayFor(modelItem => item.Id)   @Html.DisplayFor(modelItem => item.UserName)   } 

我找到了一个使用ViewModels的工作解决方案:

视图模型:

 public class RoleUserVM { public IdentityRole Role { get; set; } public ICollection Users { get; set; } } 

控制器:

 public async Task Details(string id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } var role = await RoleManager.FindByIdAsync(id); var users = new List(); foreach (var user in UserManager.Users.ToList()) { if (await UserManager.IsInRoleAsync(user.Id, role.Name)) { users.Add(user); } } RoleUserVM vm = new RoleUserVM(); vm.Users = users; vm.Role = role; return View(vm); } 

视图:

 @model AspnetIdentitySample.Models.RoleUserVM @Html.DisplayFor(model => model.Role.Name)  @foreach (var item in Model.Users) {  } 
@Html.DisplayFor(modelItem => item.UserName)