Search code examples
c#asp.net-mvc-2drop-down-menuviewdata

There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Carrera'


I'm having trouble when handling the Post request for my controller:

[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);
}

When the HttpGet action runs, the form to create renders fine. The values are set correctly on the DropDownList and everything is peachy; when I try to submit the form (run the HttpPost action) I receive the error.

Can anyone help me out?

Is it because the HttpPost doesn't have a ViewData declared? Thanks for the help.


Solution

  • Since you are Posting on the same View, when you post to Creat the ViewData["Carreras"] is not created. You have to load the data of your carreras again in your Post.

    [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);
    }