以下是它的要点:我学校有一份课程清单。每个班级属于一个职业。我正在创建一个新的类表单,例如。数学,社会研究等。在表格上我想要一个下拉列表,用我们提供的可用职业生成。
无法投射类型的对象 'System.Collections.Generic.List`1 [System.Web.Mvc.SelectListItem]' 输入'System.Web.Mvc.SelectList'。
这是我的代码:
[HttpGet]
public ActionResult Crear()
{
CarreraRepository carreraRepository = new CarreraRepository();
var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
var carrerasList = new List<SelectListItem>();
foreach (var carrera in carreras)
{
carrerasList.Add(new SelectListItem()
{
Text = carrera.Nombre,
Value = carrera.ID.ToString()
});
}
ViewData["Carreras"] = carrerasList.AsEnumerable();
Materia materia = new Materia();
return View(materia);
}
[HttpPost]
public ActionResult Crear(Materia materia, FormCollection values)
{
if (ModelState.IsValid)
{
repo.Add(materia);
repo.Save();
return RedirectToAction("Index");
}
return View(materia);
}
这是视图:
<div class="editor-label">
<%: Html.LabelFor(model => model.IDCarrera) %>
</div>
<div class="editor-field">
<%: Html.DropDownList("Carrera", (SelectList)ViewData["Carreras"]) %>
<%--<%:Html.TextBoxFor(model => model.IDCarrera)%>--%>
<%: Html.ValidationMessageFor(model => model.IDCarrera) %>
</div>
有什么建议吗?我的代码数据库模式和代码非常简单,因此错误可能对某些人来说非常明显。谢谢您的帮助! :)
答案 0 :(得分:3)
您应该在viewdata中添加SelectList
,而不是像List<SelectlistItem>
那样:
var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
var carrerasList = new SelectList(carreras, "ID", "Nombre");
ViewData["Carreras"] = carrerasList;
答案 1 :(得分:0)
对我来说,由于您有IEnumerable<SelectListItem>
列表,因此可以将其放在ViewData
变量中,如下所示:
CarreraRepository carreraRepository = new CarreraRepository();
var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
IEnumerable<SimpleListItem> carrerasList =
carreras.Select(d => new SelectListItem {
Text = d.Nombre,
Value = d.ID.ToString()
}
);
ViewData["Carreras"] = carrerasList;
然后在您的视图中执行此操作:
@Html.DropDownList("Carreras", (IEnumerable<SelectListItem>)ViewData["Carreras"])