Я использую dropdownlist в одном из моих 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'.
В вашем контроллере вы создаете новый SelectList
из IEnumerable
, что неверно, потому что вы уже указали Свойства значения
и Текст
.
У вас есть два варианта:
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 ---") %>
Как следует из сообщения об ошибке, вам нужен IEnumerable
, а не IEnumerable
.
Конструктор для SelectList имеет перегрузку, которая принимает IEnumerable. См. .net MVC, SelectLists и LINQ