Извлечение сущностей как 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")