2015-11-15 44 views
0

我对MVC5非常陌生,正在尝试显示用户详细信息的列表视图以及他们所在角色的名称。我使用MVC标识设置了角色。列表视图显示角色和应用程序用户

下面是我的ViewModel

public class UserRoleViewModel 
{ 

    public string UserRoleVMId { get; set; } 

    public string Title { get; set; } 

    public string FirstName { get; set; } 

    public string Surname { get; set; } 

    public string Email { get; set; } 

    public string Role { get; set; } 

    public bool AccountEnabled { get; set; } 


} 

而且我的控制器:

public ActionResult Index() 
    { 
     var model = (from d in db.Users 
        select new UserRoleViewModel() 
        { 
         UserRoleVMId = d.Id, 
         Title = d.Title, 
         FirstName = d.FirstName, 
         Surname = d.Surname, 
         Email = d.Email, 
         AccountEnabled = d.AccountEnabled, 
         Role = d.Role.Name 
        }).ToList(); 

     return View(model); 
    } 

我不确定如何显示角色名称和正在错误消息

does not contain the definition for Role and no extension method Role 

Role = d.Role.Name 

任何帮助,将不胜感激

感谢

+2

你必须加入角色表用户表来获得角色的名字。 – Azim

回答

0

您可以使用此代码

return view(db.Users.ToList()); 

,并在顶部使用您的视图

@model IEnumerable<YourProjectName.Models.Users> 

,并使用此的foreach为显示内容

012当你想显示一个用户的详细信息

viewModel.RolesForThisUser = UserManager.GetRoles(userId).ToList(); 

这是有用的:

+0

也不会推荐这个......他只需要使用一个连接。 – Seabizkit

0

可以使用GetRoles方法。

你应该使用属性的角色,因为用户可以拥有多个角色:

public ActionResult Index() 
    { 
     using(var context = new IdentityDbContext()){ 

    viewModel = 
     context.Users 
     .Include("Roles") 
     .Select(u => 
      new UserRoleViewModel { 
       UserRoleVMId = u.Id, 
       Title = u.Title, 
       FirstName = u.FirstName, 
       Surname = u.Surname, 
       Email = u.Email, 
       AccountEnabled = u.AccountEnabled, 
       Role = u.Roles.First().Role.ToString() 
      } 
     ).ToList(); 
    } 

     return View(viewModel); 
    } 
+0

我不会推荐这个!他只需要使用加入。 – Seabizkit

+0

@ Seabizkit,你能解释一下为什么你不这样做? –

+0

他正在循环....这样做,将是非常昂贵的......当他可以只是加入他所拥有的代码时......无论如何,技术上这是更正确的方式..... – Seabizkit

相关问题