DateTime 值错误地绑定小时

DateTime value binds hour incorrectly

我在订单页面上有一个 @HTML.EditorFor,用户可以在其中选择取货时间。我将值保存在 Session 中,并由 Review 页面获取。用户可以决定编辑将他们发送回订单的位置,并绑定他们以前的值。除取件时间外,所有其他值都正确绑定,但仅限于小时。分钟绑定正确,但由于某种原因,小时始终显示为 3。我在调试时观察了该值;即使绑定后该值始终正确,但始终显示为 3。

我的模型

[Required(ErrorMessage = "Pickup time is required")]
[DisplayName("Pickup time")]
[DisplayFormat(DataFormatString = "{0:h:mm tt}")]
[DataType(DataType.DateTime)]
public DateTime PickupTime { get; set; }

我的观点

@Html.EditorFor(model => model.Order.PickupTime, new { htmlAttributes = new 
{ @class = "form-control" } })

我正在从视图模型创建一个新的 Order 对象:

Order order = new Order() {
    PickupTime = ofvm.Order.PickupTime
};

我尝试过不同的 DataFormatStrings,使用 TempData 和 ViewBags 而不是 Sessions。所有这些值始终正确,但无论小时值是多少,它始终显示为 3。有人知道发生了什么吗?

我找到了解决办法。为什么它没有正确绑定对我来说仍然没有意义。但修复它的方法是将 .TimeOfDay 添加到 EditorFor 控件中的 Linq 表达式,所以不是这样:

@Html.EditorFor(model => model.Order.PickupTime, new { htmlAttributes = new 
{ @class = "form-control" } }) // Always displayed '3' as the hour, no matter the value

我这样做了:

@Html.EditorFor(model => model.Order.PickupTime.TimeOfDay, new { 
htmlAttributes = new { @class = "form-control" } }) // Displays correct hour value

现在时间正确绑定了。我认为 DataFormatString 属性就足够了,因为值在那里,但由于某种原因它只是不起作用。所以从现在开始,每当我需要将时间值绑定到 EditorFor 控件时,我都不会使用格式字符串。