1

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

用户及其角色存储在 ASP.net 成员资格提供程序表中。使用下面的代码,我可以显示每个用户及其分配的角色,但我的问题是如果用户具有多个角色,那么用户会重复。

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

我的视图模型是:

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

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

我想以以下格式显示它:

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

用户 | 角色

约翰 | 管理员、审批人

山姆 | 审批人

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

4

2 回答 2

1

反过来做:不要获取具有特定角色的用户,获取用户列表并循环遍历,使用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) });
}
于 2015-07-06T12:00:10.843 回答
1

你为什么不这样做

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

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

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

MSDN:字符串。加入

于 2015-07-06T12:00:47.650 回答