我的简单应用程序上的转换异常无效

时间:2010-09-05 23:03:06

标签: c# asp.net-mvc-2 .net

以下是它的要点:我学校有一份课程清单。每个班级属于一个职业。我正在创建一个新的类表单,例如。数学,社会研究等。在表格上我想要一个下拉列表,用我们提供的可用职业生成。

  

无法投射类型的对象   '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>

有什么建议吗?我的代码数据库模式和代码非常简单,因此错误可能对某些人来说非常明显。谢谢您的帮助! :)

2 个答案:

答案 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"])