这将是一个简单的人。我只是学习MVC的方式。
我有一个用户为我提供了一个开始时间(start)和一个持续时间(LengthOfShift)为一个工作周期在视图。
我想在数据库中存储开始时间,持续时间和计算的结束时间。
我想我理解模型是进行计算的最佳位置,而在控制器或视图中进行计算并不是最佳实践。
我的简化模型和控制器如下。
任何指针,我做错了什么?
public class Shift
{
public int ShiftId { get; set; }
public string Code { get; set; }
public DateTime Start { get; set; }
public TimeSpan LengthOfShift { get; set; }
public DateTime Finish
{
get {
return Start.Add(LengthOfShift);
}
}
}
控制器public class ShiftsController : Controller
{
private ApplicationDbContext db = new ApplicationDbContext();
// GET: Shifts
public ActionResult Index()
{
return View(db.Shifts.ToList());
}
// GET: Shifts/Create
public ActionResult Create()
{
return View();
}
// POST: Shifts/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ShiftId,Code,Start,LengthOfShift")] Shift shift)
{
if (ModelState.IsValid)
{
db.Shifts.Add(shift);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(shift);
}
}
尝试在计算字段中添加一个空setter
在Create方法中,Finish属性不包含在绑定中。在绑定中包含此属性,它应该可以工作。希望对你有帮助。
使用getter属性为Finish添加正确的完成。不需要额外的代码来计算可以从现有属性轻松派生的值。