可为空的 DateTime 的 Datepicker 绑定不正确
Posted
技术标签:
【中文标题】可为空的 DateTime 的 Datepicker 绑定不正确【英文标题】:Datapicker for nullable DateTime binds incorrectly 【发布时间】:2014-06-02 17:00:13 【问题描述】:我有这个问题,我的项目实体中有 2 个属性:
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "dd/MM/yyyy", ApplyFormatInEditMode = true)]
public DateTime? StartDate get; set;
[DisplayFormat(DataFormatString = "dd/MM/yyyy", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
public DateTime EndDate get; set;
在我看来,我有以下代码。
<div class="control-group">
<label class="control-label" for="prependedInput">@Resources.Project.StartDate</label>
<div class="controls">
<div class="input-prepend">
<input type="text" name="StartDate" class="input-small datepicker" value="@DateTime.Now.ToDateFormat()" />
</div>
</div>
</div>
<div class="control-group">
<label class="control-label" for="prependedInput">@Resources.Project.EndDate</label>
<div class="controls">
<div class="input-prepend">
<input type="text" name="EndDate" class="input-small datepicker" value="@DateTime.Now.ToDateFormat()" />
</div>
</div>
</div>
在我的控制器中,我试图创建一个新对象,但 ModelState.IsValid 总是返回 false,因为 StartDate 的值为空。
public virtual ActionResult Create(Project model)
if (ModelState.IsValid)
Repository.Project.Add(model);
return RedirectToAction(MVC.Project.Index());
return View(model);
如何解决这个问题并将我的可为空的 StartDate 属性的值设置为使用 datepicker 选择的日期?
【问题讨论】:
【参考方案1】:DisplayFormat
属性在绑定数据时对DateTime?
没有影响。由于此默认数据绑定器预计日期为标准格式 f.e. YYYY-MM-dd
。
如果您想以不同的格式绑定日期时间,请使用自定义数据绑定器。您可以在这里找到解决方案:
http://blog.greatrexpectations.com/2013/01/10/custom-date-formats-and-the-mvc-model-binder/
它应该可以完美解决您的问题。
【讨论】:
以上是关于可为空的 DateTime 的 Datepicker 绑定不正确的主要内容,如果未能解决你的问题,请参考以下文章
可为空的 DateTime 的 Datepicker 绑定不正确
如何在 VB.NET 中将可为空的 DateTime 设置为空?
将可为空的 DateTime 字段更新为 null 会导致默认 DateTime 值 (0001-01-01 00:00:00.0000000)