我有一个包含EquipmentID列表的表和另一个包含维护记录的表。
当用户编辑维护记录时,我希望有一个表格中所有设备ID的下拉列表。
下拉列表会填充,并使用正确数量的条目填充,但是他们都会说System.Web.MVC.SelectListItem
而不是ID的值。
以下是生成列表的代码:
public ActionResult Edit(int id)
{
MaintPerformed maintPerformed = maintPerformedRepository.GetMaintPerformed(id);
IList<EquipmentID> IDs = equipmentIDRepository.GetEquipmentIDAsList();
IEnumerable<SelectListItem> selectEquipList =
from c in IDs
select new SelectListItem
{
//Selected = (c.EquipID == maintPerformed.EquipID),
Text = c.EquipID,
Value = c.Sort.ToString()
};
ViewData["EquipIDs"] = new SelectList(selectEquipList, maintPerformed.ID);
return View(maintPerformed);
}
以下是下拉列表的.aspx页面中的条目:
%: Html.DropDownList("EquipIDs") %>
以下是我从表中生成列表的方法:
public List<EquipmentID> GetEquipmentIDAsList()
{
return db.EquipmentIDs.ToList();
}
除了指定要在下拉框中显示的文本外,一切正常。
我错过了什么或没有正确思考?
答案 0 :(得分:31)
SelectList
和SelectListItem
实际上是互斥的。你应该使用另一个或。 Etiher传递SelectList
您的原始数据(IDs
)的构造函数,或者根本不使用SelectList
,只需将ViewData["EquipIDs"]
作为您的可枚举数量SelectListItem
ViewData["EquipIDs"] = new SelectList(IDs, maintPerformed.ID, "EquipID", "Sort");
。如果采用后一种方法,则必须调整代码,以便在SelectListItem的构造函数中设置所选项(如您所做,但已注释掉)。
或者:
IEnumerable<SelectListItem> selectEquipList =
from c in IDs
select new SelectListItem
{
Selected = c.EquipID == maintPerformed.EquipID,
Text = c.EquipID,
Value = c.Sort.ToString()
};
ViewData["EquipIDs"] = selectEquipList;
或者:
{{1}}