public class DropDown
{
public string[] SelectedItems { get; set; }
public IEnumerable<SelectListItem> Items { get; set; }
}
我试图从具有上述结构的DB中获取MVC中的DropDown。
从DataBase我得到了Text和value字段并且在IEnumerable<T>
中,其中T有2个属性id和text。
将ienumerable id转换为字符串数组并将id,text分配给SelectedListItem
的最佳方法是什么?
我想过循环遍历可见数并形成DropDown,但我认为会有更好的方法。
例如:
In DB i have student table with
ID,
Name,
Class,
Section
我在ienumerable<student>
得到了id和姓名。从那里我需要转换为DropDown
答案 0 :(得分: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))
答案 1 :(得分:1)
我不确定你为什么要创建自己的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帮助程序在您的视图中为您构建下拉列表:
@Html.DropDownList("SelectListItems")
答案 2 :(得分:0)
看起来您可能希望selectedItems中每个数组位置都有多个下拉列表?如果是这样,我上周就遇到了这个问题。我在Html.DropDownListFor(...)内打了一个foreach。
<% for(int i = 0; i < Model.SelectedItems.length; i++) %>
<%: Html.DropDownListFor(m => m.SelectedItems[i], Model.Items %>