ASP.NET身份-如何获取所有用户的下拉列表

时间:2018-09-17 13:44:37

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

已在我的身份用户声明中添加了全名:

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项   具有密钥“用户”的“ IEnumerable”。

是否有更好的方法来归档我要执行的操作?请帮助

3 个答案:

答案 0 :(得分:1)

尝试使用

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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