2010-09-05 168 views
5

Tengo problemas al manejar la demanda Publicar para mi controlador:No hay ningún elemento ViewData del tipo 'IEnumerable <SelectListItem>' que tiene la clave 'Carrera'

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

Cuando se ejecuta la acción HttpGet, la forma de crear representa bien. Los valores están establecidos correctamente en DropDownList y todo es color de rosa; cuando intento enviar el formulario (ejecutar la acción HttpPost) recibo el error.

¿Alguien puede ayudarme?

¿Es porque el HttpPost no tiene un ViewData declarado? Gracias por la ayuda.

Respuesta

16

Dado que se está publicando en la misma vista, cuando se publica en Creat no se crea ViewData["Carreras"]. Tienes que volver a cargar los datos de tus carreras en tu Publicación.

+1

Esto solucionará el problema ... Dado que tanto la publicación como la obtención necesitan las mismas primeras 4 líneas de código, le sugiero que las extraiga a un método para que todo esté en un solo lugar. De esa manera, si lo cambias, solo tienes que hacerlo en un solo lugar. – thorkia

+0

@thorkia, sí estoy de acuerdo contigo ... –

Cuestiones relacionadas