我有一个可以呈现项目列表的视图,每个项目都包含Date
属性。
<%:Html.HiddenFor(m => m.Items[j].Date)%>
隐藏或显示了许多其他属性,用户可以对任何项目输入注释并将这些注释保存到数据库中。这是一种“批量修改”类型的视图。
我之前使用过这些视图效果很好,但是我遇到了Date属性的问题,因为它渲染了
<input name="Items[3].Date" type="hidden" value="3/05/2012 11:56:48 AM" />
问题是我需要将DateTime用作此数据项主键的一部分。我可以截断数据库中的毫秒以允许匹配,但不能保证每秒只有一个数据点。
如何确保DateTime
的隐藏输入字段保留所有属性的信息,包括毫秒组件?
答案 0 :(得分:2)
你真的需要使用
吗?<%:Html.HiddenFor(m => m.Items[j].Date)%>
为什么不保持简单
<input type="hidden" name="Items[<%:j%>].Date" value="<%:model.Items[j].Date.ToString("dd/MM/yy/ HH:mm:ss.fffff")%>"/>
答案 1 :(得分:1)
我没有成功在HiddenFor
字段中强制使用DateTime的格式。
DisplayFormat
属性可以强制DisplayFor
字段的格式,但不会影响HiddenFor
字段。
我使用下面的no-a-hack来实现这一点 - 序列化和反序列化ticks属性以确保保留真实时间。
public long DateTicks
{
get
{
return this.Date.HasValue ? this.Date.Value.Ticks : 0;
}
set
{
if (value == 0)
this.Date = null;
else
this.Date = new DateTime(value);
}
}
答案 2 :(得分:1)
使用
<%:Html.HiddenFor(m => m.Items[j].Date.Ticks)%>
答案 3 :(得分:0)
在模型的Date属性中使用 DisplayFormat 属性,并在格式字符串中拼出毫秒:
[DisplayFormat(DataFormatString = "{0:yyyyMMddhhmmssfff}")]