#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);
}