希望有人可以指出我在这里做错了什么。我试图从DbContext
检索多个对象,并在检索它们时将它们转换为SelectListItem
。我已经阅读了几篇关于此的帖子,他们似乎也在做同样的事情,但是当我运行这段代码时,它总是只是一个名为" System.Web的SelectListItem的SelectList。 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();
之前它按预期返回对象。
谢谢!
答案 0 :(得分:3)
请改为尝试:
var wtf = db.Departments.ToList()
var dafuq = new SelectList(wtf, "Id", "Name");
ViewBag.Departments = dafuq;
return View(model);
答案 1 :(得分:1)
您不需要SelectList
。使用1参数构造函数创建的SelectList
通过调用IEnumerable
将Convert.ToString()
中的所有值转换为字符串,这就是您在此处看到的内容。
如果您有IEnumerable<SelectListItem>
(wtf
是什么),那么您可以将其直接传递给DropDownList助手。
只需在下拉列表中使用wtf
对象,然后跳过SelectList
:
ViewBag.Departments = wtf;
@Html.DropdownListFor(m => m.Something, ViewBag.Departments);
正如vorninp指出的那样,在致电.ToList()
之前,您无需致电.Select()
。事实上,我建议反对它。
答案 2 :(得分:0)
如果我没有弄错,这种形式的构造函数只需要包含可枚举的项目,然后将这些项目内部转换为selectlistitems。
因此,您可以传递departmens并指向文本和数据字段的属性:
new SelectList(departments,"Id","Name")
答案 3 :(得分:0)
或者只是 -
ViewBag.Departments= db.Departments.ToList();
在视野中 -
@Html.DropdownListFor(m=>m.Departments,new SelectList(ViewBag.Departments,"ID","DepartmentName"),"Select Dropdown...",htmlAttributes:new{})