Ошибка с заполненным SelectListItem при публикации данных

#c# #asp.net-mvc #asp.net-mvc-4 #selectlist

#c# #asp.net-mvc #asp.net-mvc-4 #список выбора

Вопрос:

Я работаю с ASP.NET MVC 4, и я пытаюсь заполнить выпадающий список из моей базы данных, делая это :

Мои модели :

 public class AppointmentViewModel
{

    public string DisplayDate { get; set; }

    public DateTime BirthDate { get; set; }


    public MedecinViewModel Medecin { get; set; }

    public SuggestionViewModel Suggestion { get; set; }

}

public class MedecinViewModel
{
    public int MedecinId { get; set; }

    public String MedecinNom { get; set; }
}
  

Мой выпадающий список :

 <div class="editor-field">
                 @Html.DropDownListFor(a => a.Medecin.MedecinId, (SelectList)ViewBag.Medecins, "Choisissez un médecin")
            </div>
  

Мой контроллер :

 ViewBag.Medecins = new SelectList(context.DBMedecins, "MedecinId", "FullName");
  

Похоже, что после выполнения моего действия post что-то не так, и я получаю следующее сообщение об ошибке :

Элемент ViewData, который имеет ключ ‘Medecin.MedecinId’ имеет тип ‘System.Int32’, но должен иметь тип ‘IEnumerable’?

Что в этом плохого?

РЕДАКТИРОВАТЬ: мои контроллеры GET и POST

     [HttpGet]
    public ActionResult ConfirmAppointment(string interval)
    {
        context = new SchedulingDataClassesDataContext();

        ViewBag.Medecins = new SelectList(context.DBMedecins, "MedecinId", "FullName");

        return View();
    }

    [HttpPost]
    public ActionResult ConfirmAppointment(AppointmentViewModel avm)
    {
        context = new SchedulingDataClassesDataContext();
        if (ModelState.IsValid)
        {
            //logical code
        }

        return View(avm);
    }
  

Комментарии:

1. Было бы полезно, если бы вы могли показать нам свой код контроллера (т.Е. GET и POST).

2. @Belogix вот и все.

Ответ №1:

Вам нужно снова заполнить SelectList ViewBag in post action, потому что после post action он снова отображает представление, но Viewbag.Medecins не задается в post action, поэтому он становится нулевым, поскольку ViewBag область действия только для просмотра, и после этого он снова становится нулевым :

 [HttpPost]
    public ActionResult ConfirmAppointment(AppointmentViewModel avm)
    {
        context = new SchedulingDataClassesDataContext();
        if (ModelState.IsValid)
        {
            //logical code
        }
        ViewBag.Medecins = new SelectList(context.DBMedecins, "MedecinId", "FullName");
        return View(avm);
    }