Извлечение сущностей как SelectListItems

Надеюсь, кто-то может указать, что я здесь делаю неправильно. Я пытаюсь получить несколько объектов из DbContext и преобразовать их в SelectListItemкак я их получаю. Я прочитал несколько сообщений об этом, и они, кажется, делают то же самое, что и я, но когда я запускаю этот код, это всегда просто SelectList из SelectListItems, чьи имена "System.Web.MVC.SelectListItem", а Id равен нулю. Вот код:

        var wtf = db.Departments.ToList().Select(m => new SelectListItem
        {
            Text = m.Name,
            Value = m.Id.ToString()
        });

        SelectList dafuq = new SelectList(wtf);

        ViewBag.Departments = dafuq;

        return View(model);

Никаких исключений не выбрасывается или что-нибудь.

Если я просто позвоню

var omg = db.Departments.ToList();

до этого он возвращает объекты, как ожидалось.

Спасибо!

4 ответа

Решение

Попробуйте это вместо этого:

var wtf = db.Departments.ToList()
var dafuq = new SelectList(wtf, "Id", "Name");
ViewBag.Departments = dafuq;

return View(model);

Вам не нужно SelectList, SelectList созданный с помощью 1-параметрического конструктора преобразует все значения в IEnumerable в строки, позвонив Convert.ToString() на них, так вот что вы видите здесь.

Если у вас есть IEnumerable<SelectListItem> (который является то, что wtf is), то вы можете передать это непосредственно помощникам DropDownList.

Просто используйте свой wtf объект в раскрывающемся списке и пропустите SelectList:

 ViewBag.Departments = wtf;

 @Html.DropdownListFor(m => m.Something, ViewBag.Departments);

И как указал vorninp, вам не нужно звонить .ToList() перед звонком .Select(), На самом деле, я бы рекомендовал против этого.

Или просто-

ViewBag.Departments= db.Departments.ToList();

А ввиду-

@Html.DropdownListFor(m=>m.Departments,new SelectList(ViewBag.Departments,"ID","DepartmentName"),"Select Dropdown...",htmlAttributes:new{})

Если я не ошибаюсь, эта форма конструктора ожидает просто перечислимые элементы, которые затем преобразуются внутренне в элементы selectlist.

Таким образом, вы можете передать отделы и указать свойства текста и поля данных:

new SelectList(departments,"Id","Name")
Другие вопросы по тегам