我在asp.net-mvc下拉列表中做错了什么?

时间:2010-05-03 05:04:05

标签: asp.net-mvc drop-down-menu

我在我的一个create.aspx中使用了一个下拉列表,但它有些似乎无法正常工作......

public IEnumerable<SelectListItem> FindAllMeasurements()
    {
        var mesurements = from mt in db.MeasurementTypes
                          select new SelectListItem
                          {
                             Value = mt.Id.ToString(),
                             Text= mt.Name
                          };
        return mesurements;
    }

和我的控制器,

 public ActionResult Create()
    {
      var mesurementTypes = consRepository.FindAllMeasurements().AsEnumerable();
     ViewData["MeasurementType"] = new SelectList(mesurementTypes,"Id","Name");
     return View();
    } 

我的create.aspx有这个,

<p>
  <label for="MeasurementTypeId">MeasurementType:</label>
    <%= Html.DropDownList("MeasurementType")%>
     <%= Html.ValidationMessage("MeasurementTypeId", "*") %>
   </p>

当我执行此操作时,我遇到了这些错误,

DataBinding: 'System.Web.Mvc.SelectListItem' does not contain a 
 property with the name 'Id'.

2 个答案:

答案 0 :(得分:7)

在您的控制器中,您要从SelectList创建一个新的IEnumerable<SelectListItem>,这是不正确的,因为您已经指定了ValueText属性。

您有两种选择:

public ActionResult Create()
{
    var mesurementTypes = consRepository.FindAllMeasurements();
    ViewData["MeasurementType"] = mesurementTypes;
    return View();
}

或:

public ActionResult Create()
{
    ViewData["MeasurementType"] = new SelectList(db.MeasurementTypes, "Id", "Name");
    return View();
}

还有第三种使用强类型视图的首选方式:

public ActionResult Create()
{
    var measurementTypes = new SelectList(db.MeasurementTypes, "Id", "Name");
    return View(measurementTypes);
}

并在视图中:

<%= Html.DropDownList("MeasurementType", Model, "-- Select Value ---") %>

答案 1 :(得分:1)

如错误消息所示,您需要IEnumerable<SelectList>,而不是IEnumerable<Materials>

SelectList的构造函数有一个带有IEnumerable的重载。见.net MVC, SelectLists, and LINQ