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) }