2015-09-04 71 views
1

我正在使用MVC內置的用戶角色數據庫在我的應用程序中處理角色。我想在我看來以列表格式顯示所有用戶。到目前爲止,我得到了列表我的表中的角色,但我無法得到用戶反對。獲取用戶對實體框架中的角色6

我的控制器代碼:

[HttpGet] 
[AllowAnonymous] 
public ActionResult Roles() 
{ 
    var ro = (from rl in context.Roles 
       select new { Name = rl.Name, Id = rl.Id }).ToList(). 
       Select(x => new rolesViewModel { S2 = x.Name, S1 = context.Users.Where(o => o.Roles.Any(h => h.RoleId == x.Id))}).ToList(); 

    ViewBag.Roles = ro; 
    return View("rolesList"); 
} 

在我看來,我使用IEnumerable的顯示的角色用戶對他們的名單。角色顯示,但我真的找不到方法來顯示列表用戶

<table class="table"> 
    <tr> 
     <th> 
      Role 
     </th> 
     <th> 
      Assigned Users 
     </th> 

    </tr> 
    @{ 
     var s = (IEnumerable<rolesViewModel>)ViewBag.Roles; 
    } 
    @foreach (var t in s) 
    { 
     <tr> 
      <td>@t.S2</td> 
      <td>@t.S1</td> 
     </tr> 

    } 

</table> 

回答

0

你可以使用內置的成員資格/角色功能,在您的視圖:

@{ 
string[] rls = Roles.GetAllRoles(); 
    foreach (string r in rls) 
    { 
     string[] usrs = Roles.GetUsersInRole(r); 
     foreach (string u in usrs) 
     { 
     <text> 
     <tr> 
      <td>@u</td> 
     </tr> 
     </text> 
     } 
    } 
} 
0

如果您使用的身份,你可以通過使用用戶管理和角色管理器列表中的角色的角色和用戶:

public ActionResult Roles() 
{ 
    var rolemanager = new RoleManager<IdentityRole>(
     // imaging you are using default IdentityRole and RoleStore 
     // otherwise use own 
     new RoleStore<IdentityRole>(
      // imaging your EF context name id ApplicationDbContext 
      HttpContext.GetOwinContext().Get<ApplicationDbContext>())); 

    var userManager = HttpContext.GetOwinContext() 
     .GetUserManager<UserManager<ApplicationUser>>(); 

    var rolesWithUsers = rolemanager.Roles.Select(r => 
     new RoleViewModel 
     { 
      Name = r.Name, 
      Users = r.Users.Select(u => userManager.FindById(u.UserId).UserName) 
     }); 

    return View(rolesWithUsers,"rolesList"); 
} 

現在,在你看來,你可以寫這樣的事情:

@model IEnumerable<Mynamespace.RoleViewModel> 
// table header 

@foreach(var item in Model) 
{ 
    <tr> 
     <td>@item.Name</td> 
     <td>@string.Join(", ", item.Users)</td> 
    </tr> 
} 

public class RoleViewModel 
{ 
    public string Name {get; set;} 
    public IEnumerable<string> Users {get; set; } 
}