Заменить
@{
List<SelectListItem> listItems = new List<SelectListItem>();
foreach (var item in Model)
{
listItems.Add(new SelectListItem
{
Text = @Html.DisplayFor(modelItem => item.Text).ToString(),
Value = @Html.DisplayFor(modelItem => item.Value).ToString(),
Selected = Convert.ToBoolean(Html.DisplayFor(modelItem => item.Selected))
});
}
Html.DropDownList("idTipoCaso", listItems, "Nombre");
}
с:
@{
List<SelectListItem> listItems = new List<SelectListItem>();
foreach (var item in Model)
{
listItems.Add(new SelectListItem
{
Text = item.Text,
Value = item.Value,
Selected = item.Selected
});
}
}
@Html.DropDownList("idTipoCaso", listItems, "Nombre");
@Html.DisplayFor
возвращает MvcHtmlString
, который представляет html. Это не то, что вам нужно здесь. Для SelectListItem.Text
вам нужно только string
значение item.Text
. То же самое для SelectListItem.Value
. Исключение выдается на Convert.ToBoolean(Html.DisplayFor(modelItem => item.Selected))
. ToBoolean
метод пытается преобразовать заданную MvcHtmlString
, и, поскольку метод не соответствует ожидаемому методу, и он не реализует IConvertible
, он вызывает исключение.
Ваш div пуст, поскольку Html.DropDownList("idTipoCaso", listItems, "Nombre");
возвращает MvcHtmlString
в никуда. Вы должны поместить его вне блока @ {...}, прямо в html.