Asp.Net MVC 2 Dropdown显示System.Web.MVC.SelectListItem

时间:2010-09-30 16:43:16

标签: asp.net-mvc

我有一个包含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();
    }

除了指定要在下拉框中显示的文本外,一切正常。

我错过了什么或没有正确思考?

1 个答案:

答案 0 :(得分:31)

SelectListSelectListItem实际上是互斥的。你应该使用另一个。 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}}