【问题标题】:List View displaying Roles and Application User显示角色和应用程序用户的列表视图
【发布时间】:2016-02-16 16:50:31
【问题描述】:

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

下面是我的视图模型

 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

任何帮助将不胜感激

谢谢

【问题讨论】:

  • 您必须将角色表与用户表连接起来才能获得角色名称。

标签: c# asp.net-mvc entity-framework asp.net-mvc-5 user-roles


【解决方案1】:

您可以使用GetRoles 方法:

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

当您想显示一个用户的详细信息时,这很有用。

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

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

【讨论】:

  • 我不会推荐这个! ..他只需要使用一个连接。
  • @Seabizkit,你能解释一下你为什么不这样做吗?
  • 他陷入了循环......这样做会非常昂贵......当他可以对他拥有的代码进行连接时......从技术上讲更正确无论如何......
  • @Seabizkit,没错,我更新了我的答案
  • 嘿真的很抱歉很痛苦,这又是不正确的,因为这将进行多次调用......或主选择中的内部选择......你应该使用 linqpad 来查看这会生成 SQL,但这比第一个答案要好……因为这是一个请求,而另一个是多个请求。同样,这并不完美的原因是它在不需要时具有内部选择。希望这会有所帮助。
【解决方案2】:

您可以使用此代码

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

并在您看来最重要的用途

@model IEnumerable<YourProjectName.Models.Users>

并将此 foreach 用于显示内容

@foreach(var item in Model){<p>@item.Title</p> and etc }

【讨论】:

  • 也不推荐这个……他只需要使用一个join即可。
猜你喜欢
  • 1970-01-01
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
相关资源
最近更新 更多