ASP.NET Identity - Как получить выпадающий список всех пользователей - PullRequest
0 голосов
/ 17 сентября 2018

добавили полное имя к моей заявке на имя пользователя здесь:

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 ', который имеет ключ' Users '.'

Есть ли лучший способ архивировать то, что я пытаюсь сделать?пожалуйста помогите

Ответы [ 3 ]

0 голосов
/ 17 сентября 2018

Попробуйте создать список, как показано ниже. Выберите правильное значение для текста и значения.

var users = Roles.GetUsersInRole("*");
    var list = users.Select(x => new SelectListItem(){ Text = x.FullName, Value = x.FullName);
    ViewBag.Users = list;
0 голосов
/ 18 сентября 2018

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;

AnАльтернатива для получения 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 вы можете использовать Users и Rolesс контекстом данных для создания 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();
}
0 голосов
/ 17 сентября 2018

Попробуйте использовать

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