我在我的一个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'.
答案 0 :(得分:7)
在您的控制器中,您要从SelectList
创建一个新的IEnumerable<SelectListItem>
,这是不正确的,因为您已经指定了Value
和Text
属性。
您有两种选择:
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