Asp.net-Mvc

在 MVC Asp.net 身份中具有角色的使用者列表

  • March 14, 2022

我想列出在我的網站上註冊的所有使用者及其角色的列表。

身份證 | 姓名 | 角色


1 | 美國廣播公司 | 行政


2 | 防禦工事 | 使用者

像這樣,我製作了角色控制器,其中列出了所有角色。

public ActionResult Index()
   {
       var roles = context.Roles.ToList();
       return View(roles);
   }

在視圖中

@model IEnumerable<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>
@{
   ViewBag.Title = "Index";
}    
<div>
   @foreach (var role in Model)
   {
       <p>
           <strong>@role.Name | </strong>
       </p>
   }
</div>

這將列出所有角色,但我想要使用者列表及其角色。

請給出任何解決方案,謝謝

創建一個名為 UserViewModel 的新類。這將充當您頁面的視圖模型。

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

在控制器的操作方法中,獲取使用者列表及其角色並將其映射到 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);
}

然後在視圖中使用新模型。確保在您定義視圖模型的地方使用正確的命名空間。

@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>

引用自:https://stackoverflow.com/questions/27758990