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

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

和我的控制器,

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

我的create.aspx有这个,

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

当我执行这个我得到这些错误,

DataBinding: 'System.Web.Mvc.SelectListItem' does not contain a 
 property with the name 'Id'.
Run Code Online (Sandbox Code Playgroud)

Dar*_*rov 7

在你的控制器,你要创建一个新SelectListIEnumerable<SelectListItem>这是不正确的,因为你已经指定的ValueText属性.

您有两种选择:

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

要么:

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

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

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

并在视图中:

<%= Html.DropDownList("MeasurementType", Model, "-- Select Value ---") %>
Run Code Online (Sandbox Code Playgroud)