2010-09-05 7 views
5

Mam problemy podczas obsługi żądania POST do mojego kontrolera:Nie ma pozycja ViewData typu „IEnumerable <SelectListItem>”, który ma klucz „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); 
} 

Kiedy akcja HttpGet biegnie, formularz do utworzenia renderuje się dobrze. Wartości są ustawione poprawnie na liście DropDownList i wszystko jest brzoskwiniowe; kiedy próbuję przesłać formularz (uruchomić akcję HttpPost), pojawia się błąd.

Czy ktoś może mi pomóc?

Czy to dlatego, że HttpPost nie ma deklaracji ViewData? Dzięki za pomoc.

Odpowiedz

16

Ponieważ publikujesz w tym samym widoku, po opublikowaniu na Creat nie zostanie utworzony ViewData["Carreras"]. Musisz ponownie załadować dane swoich carrerasów w swoim poście.

[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

To rozwiąże problem ... Ponieważ zarówno postu i uzyskać potrzebne te same pierwsze 4 linie kodu, chciałbym zaproponować wydobycia ich z metodą tak to wszystko w jednym miejscu. W ten sposób, jeśli to zmienisz, musisz zrobić to tylko w jednym miejscu. – thorkia

+0

@thorkia, tak, zgadzam się z tobą .. –

Powiązane problemy