5

コントローラーの 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 が宣言されていないためですか? 助けてくれてありがとう。

4

1 に答える 1

16

同じビューに投稿しているため、投稿時にCreatViewData["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);
}
于 2010-09-06T01:07:06.380 に答える