我的 Simulacion Controller 中有以下代码:
[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);
}
当我运行创建操作时,我可以看到下拉列表工作正常。我可以从现有 Material 或评估器列表中进行选择。当我尝试 POST 创建操作时,我收到了发布在顶部的异常。
下面是我如何显示下拉列表:
<div class="editor-field">
<%: Html.DropDownList("IDMateria", (SelectList)ViewData["Materias"])%>
<%: Html.ValidationMessageFor(model => model.IDMateria) %>
</div>
我很困惑,因为我在同一个应用程序的另一个区域使用了相同的代码并且它有效,我只是更改了变量名称以适应这个用例。
最佳答案
如果模型状态无效,您似乎需要重置 ViewData,因为它不会自动持久化。
关于c# - 具有键 'IDMateria' 的 ViewData 项的类型为 'System.Int32' 但必须为 'IEnumerable<SelectListItem>' 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3390329/