3

我有一个呈现项目列表的视图,每个项目都包含一个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保留所有属性信息,包括毫秒组件?

4

4 回答 4

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")%>"/>
于 2012-05-08T05:19:29.400 回答
1

利用

<%:Html.HiddenFor(m => m.Items[j].Date.Ticks)%>
于 2012-05-08T06:46:32.250 回答
1

我没有成功在HiddenFor字段中强制使用 DateTime 的格式。

DisplayFormat属性可以强制字段的格式,DisplayFor但对字段没有影响HiddenFor

我采用了下面的 no-quite-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); 
    }
}
于 2012-05-08T05:12:50.757 回答
0

在模型中的 Date 属性上使用DisplayFormat属性,并在格式字符串中拼出毫秒:

[DisplayFormat(DataFormatString = "{0:yyyyMMddhhmmssfff}")]
于 2012-05-08T00:43:02.997 回答