【发布时间】:2014-12-12 16:24:45
【问题描述】:
我正在开发我的第一个 MVC 应用程序并且有一个关于 ViewModels 的问题。
我的应用有一个 Home 模型:
{
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 {..}
...
}
默认控制器和视图工作正常,但我对其进行了更改,以便用户可以选择主页>索引视图中每个主页旁边的“预订”按钮,其中列出了所有可用的。
然后在 Booking > Create 控制器中,我构建了一个 HomeBookingsViewModel,其中包含该 Home 的 Home ID、Number 和 Bookings 列表。
在 Booking > Create 视图中,我调用部分视图并传递 model.Bookings,它会显示在表格中。
然后我使用表单来获取新的预订。为此,我必须修改我的 HomeBookingViewModel(见下文)以包含 From 和 To 日期,否则我无法在控制器中获取这些值。
{
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; }
}
我现在遇到的问题是,如果 Booking>Create[HttpPost] 方法检测到错误(必须检查!)我无法构建 HomeBookingViewModel 以在返回中传回。
问题:我是不是让事情变得过于复杂,或者,如果这听起来合理,我如何从 Home>Create[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
}
【问题讨论】:
标签: asp.net-mvc viewmodel