2015-04-27 5 views
0

Как можно показать список всех пользователей в определенной роли.ASP.NET MVC 5 Получить пользователей от определенной роли

Прилагаю модель IdentityRole к моему представлению с назначенной ей ролью «Администратор». Пока я могу получить UserId.

@model Microsoft.AspNet.Identity.EntityFramework.IdentityRole 

@Html.DisplayNameFor(model => model.Name) // Shows 'Admin' 

@foreach (var item in Model.Users) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.UserId) 
     </td> 
    </tr> 
} 

Возможным решением было бы создать Список пользователей в контроллере и прикрепить его к представлению. Проблема в том, что мне также нужны данные из самой роли.

+0

http://stackoverflow.com/questions/27347802/how-to-list-users-with-role-names-in-asp-net-mvc -5 –

+1

Метод в примере имеет атрибут от пользователя (мой идентификатор роли). Поэтому я предполагаю, что пример показывает все роли от пользователя. Мне нужно показать всех пользователей из определенной роли, а также данных (имя, описание, ..) из самой роли. – Sam

ответ

2

я нашел рабочий раствор с помощью ViewModels:

ViewModel:

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

Контроллер:

public async Task<ActionResult> Details(string id) 
{ 
    if (id == null) 
    { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
    } 

    var role = await RoleManager.FindByIdAsync(id); 

    var users = new List<ApplicationUser>(); 
    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) 

<table class="table table-striped"> 
    @foreach (var item in Model.Users) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.UserName) 
      </td> 
     </tr> 
    } 
</table> 
6

Если вы используете ASP.NET Идентификация 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) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Id) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.UserName) 
     </td> 
    </tr> 
} 
+0

Хорошее решение, но есть ли причина, по которой вы не используете RoleManager/UserManager? – Sam

+0

Это только я или это не работает? Счеты ролей пользователей всегда равны нулю, даже если я включаю его с помощью структуры сущностей. – Ian

Смежные вопросы