繁体   English   中英

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

[英]ASP.NET Identity - How to get a dropdown list of all users

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

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:'没有类型为'IEnumerable'的ViewData项目具有键'Users'。

有没有更好的方法来存档我要执行的操作? 请帮忙

尝试使用

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM