5

我在处理控制器的 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 吗?谢谢您的帮助。

4

1 回答 1

16

由于您在同一视图上发布,因此当您发布到时Creat不会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);
}
于 2010-09-06T01:07:06.380 回答