我正在为我的C.R.U.D应用程序编写一个Edit方法,但是我一直在更新用户角色。我试图遍历用户角色并分配用户角色,但尚未分配角色。我收到一条错误消息,foreach cannot operate on variables of type 'Task<IList<string>>' because 'Task<IList<string>>' does not contain a public instance definition for 'GetEnumerator'
该如何解决?或者有什么更好的方法来解决这个问题?
[HttpPost]
public async Task<IActionResult> Edit(EditUserViewModel editUserViewModel)
{
var user = _userManager.Users.Where(e => e.Id == editUserViewModel.id).SingleOrDefault();
user.FirstName = editUserViewModel.FirstName;
user.LastName = editUserViewModel.LastName;
user.MiddleName = editUserViewModel.MiddleName;
user.Dob = editUserViewModel.Dob;
var AllUserRoles = _userManager.GetRolesAsync(user);
foreach(var userRole in AllUserRoles)
{
if (userRole != editUserViewModel.RoleToBeAssigned)
{
await _userManager.AddToRoleAsync(user, editUserViewModel.RoleToBeAssigned);
}
}
await _userManager.UpdateAsync(user);
return View(user);
}
答案 0 :(得分:1)
GetRolesAsync
返回一个Task
,它代表异步操作,其中包含角色名称列表。因此,您无法使用foreach
直接对其进行迭代。您应该使用await
关键字等待结果,然后进行迭代。示例:var AllUserRoles = await _userManager.GetRolesAsync(user);
您可以查看here GetRolesAsync
方法的详细信息。