Я разрабатываю свое первое приложение MVC и задаю вопрос о ViewModels.MVC View Model advice
Мое приложение имеет Главную модель:
{
public int ID { get; set;}
public int Number {..} << This is not the same as the ID and is displayed on all pages for a Home
public string Name {..}
..
}
и модель бронирования:
{
public int ID {..}
[ForeignKey]
public int HomeID {..}
public virtual Home Home {..}
...
}
контроллеры и представления по умолчанию работали хорошо, но я изменил его так, что пользователь может выбрать ' Кнопка «Забронировать» рядом с каждым «Домой» на странице «Главная»> «Индекс», в котором перечислены все доступные.
Затем в Резервировании> Создать контроллер Я построю HomeBookingsViewModel
, который содержит ИД дома, Номер, а затем Список Заказы для этого дома.
В режиме бронирования> Создать вид Я вызываю частичный вид и передаю model.Bookings
, которые отображаются в таблице.
Затем я пользуюсь формой, чтобы получить новый заказ. Для этого мне пришлось изменить мой HomeBookingViewModel
(см. Ниже), чтобы включить От и До дат, иначе у меня не было возможности получить эти значения в контроллере.
{
public int HomeID { get; set; }
public int HomeNo { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yy}", ApplyFormatInEditMode = true)]
[Display(Name = "Start date")]
public DateTime FromDate { get; set; }
[Required]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd/MM/yy}", ApplyFormatInEditMode = true)]
[Display(Name = "End date")]
public DateTime ToDate { get; set; }
public List<Booking> Bookings { get; set; }
}
Проблема теперь у меня есть, если бронирование> Создать [HttpPost] метод обнаруживает ошибку (должны проверить!) Я не могу построить HomeBookingViewModel
передать обратно в ответ.
Вопрос: Могу ли я чрезмерно усложнять или, если это звучит разумно, как я возвращаюсь к форме с ошибками из дома> Создать [HttpPost] контроллер, который выглядит следующим образом:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "HomeID,FromDate,ToDate,BookedBy")] Booking booking)
{
if (ModelState.IsValid)
{
if ((booking.FromDate > booking.ToDate) || (booking.FromDate < DateTime.Today.Date) || (booking.ToDate < DateTime.Today.Date))
{
return View(booking);
}
db.Bookings.Add(booking);
db.SaveChanges();
return RedirectToAction("Create", new { id = booking.StoreID });
}
return View(booking); << Create view is expecting MyApp.Models.BookingViewModel but this is sending just a Booking
}