0
public class DropDown
{

    public string[] SelectedItems { get; set; }

    public IEnumerable<SelectListItem> Items { get; set; }

}

我试图从具有上述结构的 DB 中获取 MVC 中的 DropDown。

从数据库中,我得到了文本和值字段,并且在IEnumerable<T>其中 T 有 2 个属性 id 和文本。

将 ienumerable id 转换为字符串数组并将 id、text 分配给的最佳方法是什么SelectedListItem

我想过循环遍历 ienumerable 并形成 DropDown,但认为会有更好的方法。

更新

例如 :

In DB i have student table with
 ID,
 Name,
 Class,
 Section

我得到了 id 和 Name ienumerable<student>。从那里我需要转换成DropDown

4

3 回答 3

2

我不确定您为什么要尝试创建自己的 DropDown 类,为什么不使用内置的 MVC HTML Helper?

如果你有一个 IEnumerable 你想变成一个 SelectList 将被助手使用,这样的事情会起作用:

var selectListItems = from t in items
select new SelectListItem{
     Text = t.Text,
     Value = t.Id
}.ToList();

然后将其触发到您的视图中,理想情况下您可以使用视图模型,但 ViewBag 也可以:

ViewBag.SelectListItems = selectListItems;

最后,让您的 HTML Helper 在您的视图中为您构建下拉列表:

@Html.DropDownList("SelectListItems")
于 2013-08-13T14:55:09.037 回答
2
IEnumerable<Student> studentList = GetStudentList();
IEnumerable<SelectListItem> dropdownItems = new MultiSelectList(studentList, "ID", "Name",selectedValues);

DropDown dropDown = new DropDown { Items = dropdownItems  };

如果你想创建一个列表框,你可以使用这样的 HTML 助手来完成:

@Html.ListBoxFor(item => item.SelectedStudents, new MultiSelectList(Model.StudentList, "ID", "Name",selectedValues))
于 2013-08-13T14:34:04.117 回答
0

看起来您可能希望 selectedItems 中的每个数组位置都有多个下拉列表?如果是这样,我上周刚遇到这个问题。我在Html.DropDownListFor(...)中调用了一个 foreach 。

<%    for(int i = 0; i < Model.SelectedItems.length; i++) %>
    <%: Html.DropDownListFor(m => m.SelectedItems[i], Model.Items %>
于 2013-08-13T14:54:09.127 回答