如何将用户角色传递给ASP.NET MVC中的ViewModel?

时间:2015-05-25 09:07:24

标签: asp.net-mvc-5 asp.net-identity

管理员应该能够创建用户并选择用户所属的角色。

我的CreateUserViewModel看起来像是:

public class CreateUserViewModel
{
    public string Id { get; set; }
    public string Name { get; set; }
    public List<ApplicationRole> Roles { get; set; }
}

我的控制器操作如下:

public ActionResult CreateUser()
{
    var model = new CreateUserViewModel();
    ApplicationDbContext appDbContext = new ApplicationDbContext();
    // this is the part that doesn't work because of the following error:
    // Error 1
    // Cannot implicitly convert type
    // 'System.Data.Entity.IDbSet<Microsoft.AspNet.Identity.EntityFramework.IdentityRole>'
    // to 'System.Collections.Generic.List<AspNetMvcProject.Models.ApplicationRole>'.
    // An explicit conversion exists (are you missing a cast?)
    model.Roles = appDbContext.Roles;
    return View();
}

这样做的主要目的是能够获得 list of roles ,以便创建用户的管理员可以选择用户应该属于<select>的角色元件。

1 个答案:

答案 0 :(得分:2)

您需要将实体框架DBSet(Microsoft.AspNet.Identity.EntityFramework.IdentityRole)中的角色列表转换为blb_pgin_bprp.Models.ApplicationRole个实例。

你可能会这样:

public ActionResult CreateUser()
{
   var model = new CreateUserViewModel();
   ApplicationDbContext appDbContext = new ApplicationDbContext();

   model.Roles = appDbContext.Roles.Select(r => new lb_pgin_bprp.Models.ApplicationRole { Id = r.ID, Name = r.Name }).ToList();
   return View();
}

您在数据库角色上使用Select来创建ApplicationRole的实例,并选择IDName

编辑:

您可能需要执行以下操作:

public ActionResult CreateUser()
{
   var model = new CreateUserViewModel();
   ApplicationDbContext appDbContext = new ApplicationDbContext();

   var rolesFromDb = appDbContext.Roles.ToList();

   model.Roles = rolesFromDb.Select(r => new lb_pgin_bprp.Models.ApplicationRole { Id = r.ID, Name = r.Name }).ToList();

   return View();
}