ASP.NET MVC 5从特定角色获取用户

时间:2015-04-27 08:58:19

标签: c# asp.net 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>
}

一种可能的解决方案是在控制器中创建用户列表并将其附加到View。问题是我还需要角色本身的数据。

2 个答案:

答案 0 :(得分:7)

如果您使用的是ASP.NET Identity 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>
}

答案 1 :(得分:2)

我找到了一个使用ViewModels的工作解决方案:

视图模型:

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>