Элемент ViewData, имеющий ключ 'IDMateria', имеет тип 'System.Int32', но должен иметь тип 'IEnumerable <SelectListItem>' - PullRequest
4 голосов
/ 02 августа 2010

В моем контроллере Simulacion есть следующий код:

[Authorize]
public ActionResult Create()
{
    Simulacion simulacion = new Simulacion();
    MateriaRepository materia = new MateriaRepository();
    EvaluadorRepository evaluador = new EvaluadorRepository();

    ViewData["Materias"] = new SelectList(materia.FindAllMaterias().ToList(), "ID", "Nombre");            
    ViewData["Evaluadors"] = new SelectList(evaluador.FindAllEvaluadors().ToList(), "ID", "Nombre");
    return View(simulacion);
}

[AcceptVerbs(HttpVerbs.Post), Authorize]
public ActionResult Create(Simulacion simulacion)
{
    if (ModelState.IsValid)
    {
        repo.Add(simulacion);
        repo.Save();

        return RedirectToAction("Details", new { id = simulacion.ID });
    }

    return View(simulacion);
}

Когда я запускаю действие Создать, я вижу, что выпадающий список работает очень хорошо. Я могу выбрать из списка существующих Материалов или Оценщиков. Когда я пытаюсь выполнить действие POST Create, я получаю исключение, размещенное вверху.

Вот как я могу отобразить выпадающий список:

<div class="editor-field">
                <%: Html.DropDownList("IDMateria", (SelectList)ViewData["Materias"])%>
                <%: Html.ValidationMessageFor(model => model.IDMateria) %>
            </div>

Я в замешательстве, потому что я использовал этот же код в другой области моего же приложения, и он работает, я просто изменил имена переменных, чтобы соответствовать этому варианту использования.

1 Ответ

6 голосов
/ 02 августа 2010

Похоже, вам нужно сбросить ViewData, если состояние модели недопустимо, поскольку оно не будет сохранено автоматически.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...