c# - 具有键 'IDMateria' 的 ViewData 项的类型为 'System.Int32' 但必须为 'IEnumerable<SelectListItem>' 类型

标签 c# asp.net-mvc-2

我的 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/

相关文章:

c# - 从一个位置拍摄的几张图像制作全景图像

asp.net-mvc - 在MVC中在哪里编写数据库和业务逻辑?

asp.net-mvc-2 - 当我将 "<Runtime executionContext="提升的“/>”添加到我的 Web 角色定义并尝试部署时,它无法启动

C# DateTime 未正确格式化为字符串

c# - 通用索引器重载特化

c# - 如何在请求中传递字符串列表?

c# - __makeref 作为在 C# 中获取引用值的一种方式?

asp.net-mvc - 在 MVC2 站点中托管 WCF

jquery - ASP.NET MVC2 自定义 jQuery 验证 : client -side

c# - 将空字符串绑定(bind)到 Guid.Empty 或避免模型状态错误