ASP.NET MVC隐藏输入元素正在截断毫秒

时间:2012-05-08 00:37:42

标签: asp.net .net asp.net-mvc datetime

我有一个可以呈现项目列表的视图,每个项目都包含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 个答案:

答案 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}")]