如何使用 GetUsersInRoleAsync 方法检索角色中的所有用户并按照以下 .net Core MVC 中的实现将其显示在视图中
Posted
技术标签:
【中文标题】如何使用 GetUsersInRoleAsync 方法检索角色中的所有用户并按照以下 .net Core MVC 中的实现将其显示在视图中【英文标题】:How to retrieve all users in role using GetUsersInRoleAsync Method and display it the view as per below implementation in .net Core MVC 【发布时间】:2022-01-13 05:15:24 【问题描述】:这篇文章会有点长,请多多包涵。如果需要,请随时要求澄清。我将在下面发布我当前的实现,它运行良好,但我找到了内置函数 GetUsersInRoleAsync。我想知道如何将下面的控制器、模型和视图修改为
-
使用 GetUsersInRoleAsync 方法获取用户角色
然后在我的视图中检索那些细节
当前代码实现。
型号
using System.ComponentModel.DataAnnotations;
namespace MyApp.Models.ViewModels
public class RoleViewModel
public RoleViewModel()
Users = new List<string>();
public string? Id get; set;
[Required]
[Display(Name = "Role Name")]
public string Name get; set; = default!;
public List<string>? Users get; set;
控制器
[HttpGet]
public async Task<IActionResult> Read(string? id)
var role = await roleManager.FindByIdAsync(id);
if (role == null)
TempData[Helper.ErrorMessage] = "Role not found";
return View("NotFound");
var model = new RoleViewModel
Id = role.Id,
Name = role.Name
;
foreach (var user in userManager.Users)
if (await userManager.IsInRoleAsync(user, role.Name))
model.Users?.Add(user.UserName);
return View(model);
查看
@model MyApp.Models.RoleViewModel
<form method="get" asp-action="Read">
<div class="row g-3">
<div class="form-group col-sm-6">
<label asp-for="Name" class="form-label"></label>
<input asp-for="Name" class="form-control" type="text" disabled readonly>
</div>
</div>
<div class="card mt-5">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<a class="nav-link active" aria-current="true">Users</a>
</li>
</ul>
</div>
<div class="card-body">
<h5 class="card-title">Users</h5>
<p class="card-text">List of users in this Role</p>
<div class = "my-3">
@if (Model?.Users?.Count>0)
foreach (var user in Model.Users)
<li class="card-title">@user</li>
else
<partial name="_NoData" />
</div>
</div>
</div>
<partial name="_FooterMenuRead" />
</form>
【问题讨论】:
嗨,GetUsersInRoleAsync 方法返回用户存储中属于指定角色名称成员的用户列表。是否要显示该角色的所有用户? 是的。 GetUsersInRoleAsync 以 IListvar usersInRole = await _userManager.GetUsersInRoleAsync("Your Role Name"); foreach (var user in usersInRole) // add value to your list
【参考方案1】:
您可以像这样更改控制器:
[HttpGet]
public async Task<IActionResult> Read(string? id)
var role = await roleManager.FindByIdAsync(id);
if (role == null)
TempData[Helper.ErrorMessage] = "Role not found";
return View("NotFound");
var model = new RoleViewModel
Id = role.Id,
Name = role.Name
;
foreach (var user in await userManager.GetUsersInRoleAsync(role.Name))
model.Users?.Add(user.UserName);
return View(model);
【讨论】:
【参考方案2】:我发现没有任何循环的最佳方法是修改控制器如下:
[HttpGet]
public async Task<IActionResult> Read(string? id)
var role = await roleManager.FindByIdAsync(id);
if (role == null)
TempData[Helper.ErrorMessage] = "Role not found";
return View("NotFound");
var userList = await userManager.GetUsersInRoleAsync(role.Name);
RoleViewModel? model = new()
Id = role.Id,
Name = role.Name,
Users = userList
;
return View(model);
视图中的代码与问题中的代码相同
【讨论】:
以上是关于如何使用 GetUsersInRoleAsync 方法检索角色中的所有用户并按照以下 .net Core MVC 中的实现将其显示在视图中的主要内容,如果未能解决你的问题,请参考以下文章
如何在自动布局中使用约束标识符以及如何使用标识符更改约束? [迅速]