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

ama*_*rcy 10 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);
}
Run Code Online (Sandbox Code Playgroud)

以下是下拉列表的.aspx页面中的条目:

%: Html.DropDownList("EquipIDs") %>
Run Code Online (Sandbox Code Playgroud)

以下是我从表中生成列表的方法:

public List<EquipmentID> GetEquipmentIDAsList()
    {
        return db.EquipmentIDs.ToList();
    }
Run Code Online (Sandbox Code Playgroud)

除了分配要在下拉框中显示的文本外,一切都正常工作.

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

Kir*_*oll 32

SelectListSelectListItem实际上是相互排斥的.你应该使用一个另一个.Etiher传递的构造SelectList原始数据(IDs),或不使用SelectList在所有的,只是让ViewData["EquipIDs"]你的枚举SelectListItem.如果采用后一种方法,则必须调整代码,以便在SelectListItem的构造函数中设置所选项(如您所做,但已注释掉).

或者:

ViewData["EquipIDs"] = new SelectList(IDs, maintPerformed.ID, "EquipID", "Sort");
Run Code Online (Sandbox Code Playgroud)

要么:

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;
Run Code Online (Sandbox Code Playgroud)