我在订单表单页面上有一个@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.有没有人知道发生了什么?
答案 0 :(得分:0)
我找到了解决方案。对我来说,为什么它没有正确绑定仍然没有任何意义。但是修正它的原因是将.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
控件时,我就不会使用格式字符串。