0

希望有人能指出我在这里做错了什么。我正在尝试从 a 中检索几个对象,DbContext并在检索它们时将它们转换为SelectListItems 。我已经阅读了几篇关于此的帖子,他们似乎在做与我相同的事情,但是当我运行此代码时,它始终只是名称为“System.Web.MVC.SelectListItem”且 Id 为空的 SelectListItems 的 SelectList。这是代码:

        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

4 回答 4

3

试试这个:

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

return View(model);
于 2014-12-19T21:15:12.113 回答
1

你不需要一个SelectList. SelectList使用 1 参数构造函数创建的AIEnumerable通过调用它们将 中的所有值转换为字符串Convert.ToString(),这就是您在此处看到的内容。

如果你有一个IEnumerable<SelectListItem>(就是这样wtf),那么你可以将它直接传递给 DropDownList 助手。

只需wtf在下拉列表中使用您的对象,然后跳过SelectList

 ViewBag.Departments = wtf;

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

正如 vorninp 指出的那样,您无需在调用.ToList()之前先调用.Select()。事实上,我建议不要这样做。

于 2014-12-19T21:16:22.103 回答
0

如果我没记错的话,这种形式的构造函数只期望包含可枚举的项目,然后在内部转换为 selectlistitems。

因此,您可以传递部门并指向文本和数据字段的属性:

new SelectList(departments,"Id","Name")
于 2014-12-19T21:17:29.103 回答
0

要不就-

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

并且在视图中——

@Html.DropdownListFor(m=>m.Departments,new SelectList(ViewBag.Departments,"ID","DepartmentName"),"Select Dropdown...",htmlAttributes:new{})
于 2014-12-20T05:54:25.213 回答