如何在ASP.NET Update3中获取用户角色名称?

时间:2014-09-06 21:31:23

标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4

我目前正在使用个人用户帐户在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'的第一个参数。可以找到(你错过了使用指令或汇编引用吗?

我想知道如何使用新标准获得角色名称。感谢任何解决方案!

1 个答案:

答案 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
        })
    });
}