我有一个包含 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();
}
除了分配要在下拉框中显示的文本外,似乎一切正常。
我错过了什么或没有正确思考什么?
最佳答案
SelectList
和 SelectListItem
实际上是相互排斥的。您应该使用一个 或 另一个。或者通过 SelectList
的构造函数您的原始数据 ( IDs
) 或不使用 SelectList
完全,只需制作 ViewData["EquipIDs"]
您可枚举的 SelectListItem
.如果您采用后一种方法,则必须调整代码,以便在 SelectListItem 的构造函数中设置所选项目(正如您所做的那样,但已注释掉)。
任何一个:
ViewData["EquipIDs"] = new SelectList(IDs, maintPerformed.ID, "EquipID", "Sort");
或者:
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;
关于asp.net-mvc - Asp.Net MVC 2 下拉显示 System.Web.MVC.SelectListItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3832830/