在 MVC5 razor 中为每个用户加载角色列表

Load list of roles for each user in MVC5 razor

我试图显示一行每个用户及其在 ASP.net MVC 应用程序中的角色。

用户及其角色存储在 ASP.net 会员提供程序 table 中。 使用下面的代码我可以显示每个用户和他们分配的角色,但我的问题是如果用户处于多个角色然后用户会重复。

我尝试将 UserRole 设置为列表,但我现在卡住了,因为我不知道如何在下面的代码中将角​​色添加到列表中。你能给我一些指导吗?

我的视图模型是:

public class UserViewModel
{
   public string UserName { get; set; }
   public List<String> UserRole { get; set; }
}


var roles = ApplicationRoles.RolesList;
       var users = new List<UserViewModel>();
       foreach (var role in roles)
        {
           foreach (var user in Roles.GetUsersInRole(role)) 
            {
               users.Add(new UserViewModel {UserName = user, UserRole = role });
            }
        }

return View(users);

如果用户有多个角色附加到 him/her,我如何加载角色以便不重复用户名?

我想按以下格式显示:

=======================

用户 |角色

约翰 |管理员,审批人

萨姆 |批准人

=======================

反过来做:不要获取具有特定角色的用户,获取用户列表并循环遍历,使用 Roles.GetRolesForUser 方法获取他们的行列表。

var userList = Membership.GetAllUsers();

foreach(MembershipUser user in userList)
{
    string[] rolesArray = Roles.GetRolesForUser(user.UserName); 
    users.Add(new UserViewModel {UserName = user.UserName, UserRole = string.Join(",", rolesArray) });
}

你为什么不这样做

  foreach (var user in Roles.GetUsersInRole(role)) 
  {
      users.Add(new UserViewModel {UserName = user, NameAndRole = user + "|"+ String.Join(",", UserRole.ToArray() });
  }

或者您可以在视图模型中添加 属性 class 并使用它

Public String NameAndRole
{
  get
   { return name + " | "+ String.Join(",", UserRole.ToArray()) }
}

MSDN:String.Join