Нет элемента ViewData типа 'IEnumerable <SelectListItem>', который имеет ключ 'Carrera' - PullRequest
5 голосов
/ 06 сентября 2010

У меня возникают проблемы при обработке запроса 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?Спасибо за помощь.

1 Ответ

16 голосов
/ 06 сентября 2010

Поскольку вы публикуете в одном представлении, при публикации в 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);
}
...