将实体检索为选择列表项
本文关键字:列表 选择 实体 检索 | 更新日期: 2023-09-27 18:34:55
希望有人能指出我在这里做错了什么。 我正在尝试从DbContext
中检索多个对象,并在检索它们时将它们转换为SelectListItem
。 我已经读过几篇关于这个的文章,他们似乎在做和我一样的事情,但是当我运行这段代码时,它总是只是一个选择列表项的选择列表,其名称为"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();
在此之前,它会按预期返回对象。
谢谢!
试试这个:
var wtf = db.Departments.ToList()
var dafuq = new SelectList(wtf, "Id", "Name");
ViewBag.Departments = dafuq;
return View(model);
你不需要SelectList
.使用 1 参数构造函数创建的SelectList
通过调用Convert.ToString()
将IEnumerable
中的所有值转换为字符串,这就是您在此处看到的。
如果您有IEnumerable<SelectListItem>
(这就是wtf
(,则可以将其直接传递给 DropDownList 帮助程序。
只需在下拉列表中使用您的wtf
对象,然后跳过SelectList
:
ViewBag.Departments = wtf;
@Html.DropdownListFor(m => m.Something, ViewBag.Departments);
正如 vorninp 指出的那样,在拨打.Select()
之前,您无需致电.ToList()
。事实上,我会建议不要这样做。
如果我没记错的话,这种形式的构造函数期望只有可枚举的包含项目,然后在内部转换为选择列表项。
因此,您可以传递 departmens 并指向文本和数据字段的属性:
new SelectList(departments,"Id","Name")
或者只是-
ViewBag.Departments= db.Departments.ToList();
而在视野中——
@Html.DropdownListFor(m=>m.Departments,new SelectList(ViewBag.Departments,"ID","DepartmentName"),"Select Dropdown...",htmlAttributes:new{})