【问题标题】:ASP.NET Identity - How to get a dropdown list of all usersASP.NET Identity - 如何获取所有用户的下拉列表
【发布时间】:2018-09-17 13:44:36
【问题描述】:

已在此处将全名添加到我的身份用户声明中:

public string Fullname { get { return this.Firstname + " " + this.Lastname; } }

现在我正在尝试填充所有用户的下拉列表(全名)

在我的控制器中,我有:

      var users = Roles.GetUsersInRole("*");
        SelectList list = new SelectList(users);
        ViewBag.Users = list;

在我看来,我有:

   @Html.DropDownList("Users", ViewBag.Users as SelectList);

但在我的视图中突出显示“用户”时出现错误。

System.InvalidOperationException: '没有 ViewData 类型的项 具有键 'Users' 的 'IEnumerable'。

有没有更好的方法来归档我正在尝试做的事情?请帮忙

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-identity


    【解决方案1】:

    尝试使用

    @Html.DropDownList("Users", "Users list");
    

    【讨论】:

    • 嗨,感谢您的帮助 - 不幸的是,这不起作用:(
    【解决方案2】:

    尝试创建一个如下所示的列表。为文本和值选择适当的值。

    var users = Roles.GetUsersInRole("*");
        var list = users.Select(x => new SelectListItem(){ Text = x.FullName, Value = x.FullName);
        ViewBag.Users = list;
    

    【讨论】:

    • 你好 Richard,非常感谢,但是我在 { Text = x.Fullname, Value = x.Fullname) 出现错误,文本和值文本应该是 Fullname,值应该是 userId - -- 似乎有一条红色下划线表示我正在执行一项指令
    • 看起来 users 只是一个字符串数组,你需要完整的 User 对象来获取他们的全名。 Membership.GetAllUsers(); 可能是填充用户对象的更好方法
    • 我正在使用身份
    • 你从var users = Roles.GetUsersInRole("*");得到什么类型的对象
    • --- var users = Roles.GetUsersInRole("*");给出了问题中突出显示的错误,我虽然有更好的方法来获取下拉列表中的用户列表
    【解决方案3】:

    Roles.GetUsersInRole() 返回string[] 数组,您可以使用重载的Enumerable.Select() 方法从中创建SelectList

    var users = Roles.GetUsersInRole("RoleName");
    var list = users.Select((x, index) => new SelectListItem { Text = x, Value = index.ToString() });
    ViewBag.Users = list;
    

    从具有指定角色的用户那里获取SelectList 的替代方法应该是这样的:

    var users = Roles.GetUsersInRole("RoleName").Select(Membership.GetUser).ToList();
    var list = users.Select(x => new SelectListItem { Text = x.UserName, Value = Membership.GetUser(x.UserName).ProviderUserKey.ToString() }).ToList();
    ViewBag.Users = list;
    

    注意:对于 ASP.NET Identity 2,您可以使用 UsersRoles 和数据上下文来创建 SelectList,如下例所示:

    using (var context = new ApplicationDbContext())
    {
        var users = from u in context.Users
            where u.Roles.Any(r => r.Role.Name == "RoleName")
            select u;
    
        // ViewBag.Users = new SelectList(users, "Id", "UserName");
        ViewBag.Users = users.Select(x => new SelectListItem { Text = x.UserName, Value = x.Id }).ToList();
    }
    

    【讨论】:

      猜你喜欢
      • 2013-09-17
      • 1970-01-01
      • 2013-10-29
      • 2014-03-08
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      相关资源
      最近更新 更多