我目前正在使用个人用户帐户在C#中使用MVC进行ASP.NET Web应用程序。我需要获取用户的角色名称。在以前的版本中,以下代码可以起作用:
foreach (var role in userObject.Roles)
{
appUser.RolesForUser.Add(role.Role.Name);
}
但现在做完Update 3后,我现在得到:
Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole'不包含'角色'的定义没有延伸方法'角色'接受类型' Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole'的第一个参数。可以找到(你错过了使用指令或汇编引用吗?
我想知道如何使用新标准获得角色名称。感谢任何解决方案!
答案 0 :(得分:1)
试试这个:
//Get user roles
var userRoles = await UserManager.GetRolesAsync(user.Id);
<强>被修改强>
如果您拥有userName而不是userId,则必须使用FindByNameAsync而不是FindByIdAsync来检索用户。
var user = await UserManager.FindByNameAsync(myName);
获得用户对象后,您将能够获得相关角色:
var userRoles = await UserManager.GetRolesAsync(user.Id);
示例:
//
// GET: /Users/Edit/Bob
public async Task<ActionResult> Edit(string userName)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
var user = await UserManager.FindByNameAsync(userName);
if (user == null)
{
return HttpNotFound();
}
var userRoles = await UserManager.GetRolesAsync(user.Id);
return View(new EditUserViewModel()
{
Id = user.Id,
Email = user.Email,
RolesList = RoleManager.Roles.ToList().Select(x => new SelectListItem()
{
Selected = userRoles.Contains(x.Name),
Text = x.Name,
Value = x.Name
})
});
}