具有键“IDMateria”的ViewData项的类型为“System.Int32”,但必须是“IEnumerable <selectlistitem>”类型</selectlistitem>

时间:2010-08-02 17:45:41

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

我的Simulacion控制器中有以下代码:

[Authorize]
public ActionResult Create()
{
    Simulacion simulacion = new Simulacion();
    MateriaRepository materia = new MateriaRepository();
    EvaluadorRepository evaluador = new EvaluadorRepository();

    ViewData["Materias"] = new SelectList(materia.FindAllMaterias().ToList(), "ID", "Nombre");            
    ViewData["Evaluadors"] = new SelectList(evaluador.FindAllEvaluadors().ToList(), "ID", "Nombre");
    return View(simulacion);
}

[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Create(Simulacion simulacion)
{
    if (ModelState.IsValid)
    {
        repo.Add(simulacion);
        repo.Save();

        return RedirectToAction("Details", new { id = simulacion.ID });
    }

    return View(simulacion);
}

当我运行Create Action时,我可以看到下拉列表工作得很好。我可以从现有的Materias或Evaluators列表中进行选择。当我尝试POST创建操作时,我收到了顶部发布的异常。

以下是Idisplay下拉列表的方式:

<div class="editor-field">
                <%: Html.DropDownList("IDMateria", (SelectList)ViewData["Materias"])%>
                <%: Html.ValidationMessageFor(model => model.IDMateria) %>
            </div>

我很难过,因为我在同一个应用程序的另一个区域使用了相同的代码并且它有效,我只是更改了变量名称以适应这个用例。

1 个答案:

答案 0 :(得分:6)

如果模型状态无效,您似乎需要重置ViewData,因为它不会自动保留。

相关问题