2016-03-29 2 views
1

Я хочу получить только в роли пользователей в mvc, я пробовал все. Как вы знаете, AspNetUserRoles - таблица сопоставления (много-ко-многим), поэтому она не генерируется в EDMX (по дизайну, у нее нет первичного ключа). Также мы не можем использовать Таблица ролей (?). Пожалуйста, рассмотрите мою модель.Как получить только пользователя с ролями в mvc 5

Вот моя последняя попытка:

public async Task<ActionResult> Roles() 
    { 
     var list = context.Users.Include(u => u.Roles); 
     var user = new List<ApplicationUser>(); 
     foreach(var u in list) 
     { 
      if(u.Roles!= null) 
      { 
       user.Add(u); 
      } 
     }  
     return View(user); 
    } 

и вот мое мнение:

@model IEnumerable<Site.Models.ApplicationUser> 
     @{ 
     Layout = null; 
     } 

     <h2>List of users with Roles:</h2> 
     <table class="table"> 
     <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.UserName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Email) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Roles) 
     </th> 
    </tr> 
    @foreach (var item in Model) 
    { 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.UserName) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Email) 
     </td> 
     <th> 
      @Html.DisplayFor(modelItem => item.Roles) 
     </th> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id = item.Id }) | 
      @Html.ActionLink("Details", "Details", new { id = item.Id }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.Id }) 
     </td> 
    </tr> 
    } 
    </table> 
+0

В чем проблема? Вы не получаете пользователей с какой-либо ролью? – Marius

+0

Я хочу получить только в роли пользователей, но этот код получить всех пользователей. – V47

+0

Что делать, если вы меняете 'if (u.Roles! = Null)' на 'if (u.Roles.Any())'? – Hendry

ответ

0

Попробуйте один из:

var usersList = new List<ApplicationUser>(); 
    foreach (ApplicationUser user in UserManager.Users) 
    { 
     var roles = await UserManager.GetRolesAsync(user.Id); 
     if(roles.contains("Admin")) 
     { 
      usersList.Add(user); 
     } 
    } 

Это один должен возвращать только пользователям, которые имеет Роль администратора. Я надеюсь, что это помогает.

+0

этот код, такой же, как у моего кода, и возвращает всех пользователей! – V47

+0

Итак, возможно, у всех пользователей есть хотя бы роль? ;) Пробовали ли вы отладку, что возвращается, когда у пользователя нет роли? – Marius

+0

У меня есть только роль администратора на моем сайте и в таблице AspNetRoles в базе данных – V47

0

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

public async Task<ActionResult> Roles() 
    { 
     var user= context.Users.Include(u => u.Roles).Where(u=>u.Roles.Any(r=>r.Name=="RoleName")).ToList(); 
     return View(user); 
    } 
Смежные вопросы