2010-09-05 10 views
5

Ho problemi quando si maneggia la richiesta Inserisci per il mio controller:Non v'è alcun elemento Viewdata di tipo 'IEnumerable <SelectListItem>' che ha la chiave '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); 
} 

Quando l'azione HttpGet corre, il modulo per creare rende bene. I valori sono impostati correttamente su DropDownList e tutto è peachy; quando provo a inviare il modulo (esegui l'azione HttpPost), ricevo l'errore.

Qualcuno può darmi una mano?

È perché HttpPost non ha dichiarato un ViewData? Grazie per l'aiuto.

risposta

16

Poiché si sta postando sulla stessa vista, quando si invia a Creat il ViewData["Carreras"] non viene creato. Devi caricare nuovamente i dati delle tue macchine nel tuo 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); 
} 
+1

questo risolverà il problema ... Poiché sia ​​il post e il bisogno di ottenere gli stessi primi 4 righe di codice, vorrei suggerire loro l'estrazione di un metodo quindi è tutto in un unico luogo. In questo modo se lo cambi, devi farlo solo in un posto. – thorkia

+0

@thorkia, sì sono d'accordo con te .. –