C# 没有类型为';IEnumerable<;选择列表项>';那有钥匙';卡雷拉';

C# 没有类型为';IEnumerable<;选择列表项>';那有钥匙';卡雷拉';,c#,asp.net-mvc-2,drop-down-menu,viewdata,C#,Asp.net Mvc 2,Drop Down Menu,Viewdata,我在处理控制器的Post请求时遇到问题: [HttpGet] public ActionResult Crear() { CarreraRepository carreraRepository = new CarreraRepository(); var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre); var carrerasList = new SelectList(carreras,

我在处理控制器的Post请求时遇到问题:

[HttpGet]
public ActionResult Crear()
{
    CarreraRepository carreraRepository = new CarreraRepository();
    var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
    var carrerasList = new SelectList(carreras, "ID", "Nombre");
    ViewData["Carreras"] = carrerasList;

    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);
}
当HttpGet操作运行时,要创建的表单将呈现良好的效果。DropDownList上的值设置正确,一切正常;当我尝试提交表单(运行HttpPost操作)时,我收到了错误

有人能帮我吗


是因为HttpPost没有声明ViewData吗?谢谢您的帮助。

由于您在同一视图上发布,因此当您发布到
创建时,
视图数据[“Carreras”]
不会被创建。你必须在你的帖子中再次加载你的carreras的数据

[HttpPost]
public ActionResult Crear(Materia materia, FormCollection values)
{
    CarreraRepository carreraRepository = new CarreraRepository();
    var carreras = carreraRepository.FindAll().OrderBy(x => x.Nombre);
    var carrerasList = new SelectList(carreras, "ID", "Nombre");
    ViewData["Carreras"] = carrerasList;

    if (ModelState.IsValid)
    {
        repo.Add(materia);
        repo.Save();

        return RedirectToAction("Index");
    }
    return View(materia);
}

这将解决问题。。。因为post和get都需要相同的前4行代码,所以我建议将它们提取到一个方法中,这样就可以在一个地方完成。这样,如果你改变它,你只需要在一个地方做。