2016-03-29 10 views
1

Ich möchte nur in Rolle Benutzer in mvc bekommen, habe ich alles versucht. Wie Sie wissen, ist AspNetUserRoles eine Zuordnungstabelle (Viele-zu-Viele), daher wird sie nicht in EDMX generiert (von Grund auf hat sie keinen Primärschlüssel). Auch können wir nicht verwenden Role-Tabelle (?). Bitte beachten Sie mein Modell im Blick.Wie bekomme ich nur Benutzer mit Rollen in mvc 5

Hier ist mein letzter Versuch:

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

und hier ist meine Ansicht:

@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

Also, was ist das Problem? Sie erhalten keine Benutzer mit einer Rolle? – Marius

+0

Ich möchte nur in Role-Benutzer erhalten aber diesen Code erhalten alle Benutzer. – V47

+0

Was passiert, wenn Sie 'if (u.Roles! = Null)' in 'if (u.Roles.Any())' ändern? – Hendry

Antwort

0

diese eine ausprobieren:

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

Dieses nur Benutzer zurückgeben sollte, der hat Administratorrolle Ich hoffe, es hilft.

+0

diesen Code wie Minencode und gibt alle Benutzer zurück! – V47

+0

Also haben vielleicht alle Benutzer zumindest eine Rolle? ;) Haben Sie das Debuggen versucht, was wird zurückgegeben, wenn der Benutzer keine Rolle hat? – Marius

+0

Ich habe gerade Admin-Rolle in meiner Website und in AspNetRoles Tabelle in der Datenbank – V47

0

Ich denke, Sie sollten basierend auf einer bestimmten Rolle abfragen. Wenn Sie später weitere Rollen hinzufügen, wird Ihre Anwendung fehlerhaft.

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); 
    } 
Verwandte Themen