Возможны некоторые проблемы в вашем коде:
1) Избегайте использования имени свойства viewmodel в качестве ViewBag
имени свойства, так как это может вызвать путаницу между ними.
2)Вы ничего не заполняете внутри DropDownList
помощника, устанавливая для второго параметра нулевое значение, используйте ViewBag
свойства, содержащие SelectList
или List<SelectListItem>
, чтобы заполнить его.
3) Используйте строго типизированный DropDownListFor
для каждого свойства viewmodel.
Исходя из вышеизложенного, действие контроллера должно быть таким:
public ActionResult Create(int id)
{
var bookings = db.Bookings.Include(b => b.Room).Include(b => b.Register);
var model = new ViewModel();
// use query to get both selected IDs
model.RoomId = bookings.Where(...).Select(x => x.RoomId).FirstOrDefault();
model.CustomerId = bookings.Where(...).Select(x => x.CustomerId).FirstOrDefault();
ViewBag.RoomList = new SelectList(db.Rooms, "RoomID", "RoomType");
ViewBag.CustomerList = new SelectList(db.Registers, "id", "username");
return View(model);
}
И в обоих выпадающих списках должен использоваться хелпер со строгой типизацией, как в примере ниже:
@Html.DropDownListFor(model => model.RoomId, ViewBag.RoomList as SelectList, "-- Select Room --", new { @class = "form-control" })
@Html.DropDownListFor(model => model.CustomerId, ViewBag.CustomerList as SelectList, "-- Select Customer --", new { @class = "form-control" })
Примечание. Лучше заполнить списки параметров внутри свойств модели представления, которые имеют тип SelectList
/ List<SelectListItem>
, и передать их непосредственно для просмотра:
Модель
public List<SelectListItem> RoomList { get; set; }
public List<SelectListItem> CustomerList { get; set; }
Действие контроллера
public ActionResult Create(int id)
{
var bookings = db.Bookings.Include(b => b.Room).Include(b => b.Register);
var model = new ViewModel();
// use query to get both selected IDs
model.RoomId = bookings.Where(...).Select(x => x.RoomId).FirstOrDefault();
model.CustomerId = bookings.Where(...).Select(x => x.CustomerId).FirstOrDefault();
model.RoomList = db.Rooms.Select(x => new SelectListItem { Text = x.RoomType, Value = x.RoomID }).ToList();
model.CustomerList = db.Registers.Select(x => new SelectListItem { Text = x.username, Value = x.id }).ToList();
return View(model);
}
Просмотр
@Html.DropDownListFor(model => model.RoomId, Model.RoomList, "-- Select Room --", new { @class = "form-control" })
@Html.DropDownListFor(model => model.CustomerId, Model.CustomerList, "-- Select Customer --", new { @class = "form-control" })