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
控件时,我都不会使用格式字符串。
我在订单页面上有一个 @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
控件时,我都不会使用格式字符串。