2016-03-29 80 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); 
    } 
相關問題