我想列出在我的网站上注册的所有用户及其角色。
身份证 |姓名 |角色
1 | ABC |管理员
2 |防御 |用户
像这样,我制作了角色 Controller ,其中列出了所有角色。
public ActionResult Index()
{
var roles = context.Roles.ToList();
return View(roles);
}
在 View 中
@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>
@{
ViewBag.Title = "Index";
}
<div>
@foreach (var role in Model)
{
<p>
<strong>@role.Name | </strong>
</p>
}
</div>
这将列出所有角色,但我想要用户的角色列表。
请给出任何解决方案,谢谢
最佳答案
创建一个名为 UserViewModel 的新类。这将充当您页面的 View 模型。
public class GroupedUserViewModel
{
public List<UserViewModel> Users {get; set;}
public List<UserViewModel> Admins {get; set;}
}
public class UserViewModel
{
public string Username {get; set;}
public string Roles {get; set;}
}
在 Controller 的 action 方法中,获取用户列表及其角色并将其映射到 UserViewModel。
public ActionResult Index()
{
var allusers = context.Users.ToList();
var users = allusers.Where(x=>x.Roles.Select(role => role.Name).Contains("User")).ToList();
var userVM = users.Select(user=>new UserViewModel{Username = user.FullName, Roles = string.Join(",", user.Roles.Select(role=>role.Name))}).ToList();
var admins = allusers.Where(x=>x.Roles.Select(role => role.Name).Contains("Admin")).ToList();
var adminsVM = admins.Select(user=>new UserViewModel{Username = user.FullName, Roles = string.Join(",", user.Roles.Select(role=>role.Name))}).ToList();
var model = new GroupedUserViewModel{Users = userVM, Admins = adminsVM};
return View(model);
}
然后在 View 中使用新模型。确保在此处定义 View 模型的位置使用正确的命名空间。
@model Models.GroupedUserViewModel
@{
ViewBag.Title = "Index";
}
<div>
@foreach (var user in Model.Admins)
{
<p>
<strong>@user.Username | @user.Roles </strong>
</p>
}
@foreach (var user in Model.Users)
{
<p>
<strong>@user.Username | @user.Roles </strong>
</p>
}
</div>
关于asp.net-mvc - 在 MVC Asp.net 身份中具有角色的用户列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27758990/