指定带有数据注释的DateTime格式?


99

我的视图模型中有以下属性:

[DataType(DataType.DateTime)]
public DateTime? StartDate { get; set; }

如果我想显示日期,或用日期填充文本框,则可以使用以下命令:

<%: Model.StartDate %>

<%: Html.TextBoxFor(m => m.StartDate) %>

无论何时显示日期,它都将显示为:01/01/2011 12:00:00 AM

但我只想显示01/01/2011

有没有一种方法可以应用带有数据注释的显示格式?我不想去显示日期的每个实例,也不必添加一些代码来格式化它。


Answers:


149

尝试使用以下方式对其进行标记:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

刚刚尝试过,它仍会在TextBox中显示时间以及仅在页面上显示时间。
史蒂文

3
@Steven:[DataType(DataType.DateTime)]如果还没有,可以尝试删除吗?
大卫·福克斯

8
DisplayFormat仅与EditorForDisplayFor助手一起使用。
ΕГИІИО

1
很好的答案-我错过了“ ApplyFormatInEditMode”参数。
CodeHxr

5
我能够通过Html.TextBoxFor中的format参数解决此问题。通过将其设置为,@Html.TextBoxFor(model => model.YOUR_DATE, "{0:MM/dd/yyyy}")我只能获取要显示的日期。在这里找到此[ stackoverflow.com/a/14529347/2938775]
Caffeinius

44

你有尝试过吗?

[DataType(DataType.Date)]

2
如果浏览器支持,还将启用HTML5日期选择器支持。
AaronLS 2012年

24

在mvc 4中,您可以像使用TextBoxFor.. 之后一样轻松地进行操作。

@Html.TextBoxFor(m => m.StartDate, "{0:MM/dd/yyyy}", new { @class = "form-control default-date-picker" })

因此,您无需在模型或视图模型类中使用任何数据注释


是的,那些DataAnnotations非常适合EditorFor助手,但是,当使用IEnumerable(Of Entity)渲染自定义网格时,必须使用.TextBoxFor,这是我的问题。谢谢
bkwdesign

22

如果您的数据字段已经是DateTime数据类型,则无需使用[DataType(DataType.Date)]该注释;只需使用:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")]

在jQuery上,为您的日历使用datepicker

    $(document).ready(function () {
        $('#StartDate').datepicker();
    });

在HTML上,使用EditorFor辅助程序:

    @Html.EditorFor(model => model.StartDate)

“如果您的数据字段已经是DateTime数据类型,则无需使用[DataType(DataType.Date)]“ =>很有帮助
Hassan Tareq

但是对于Web api,显示格式没有强制执行DataFormatString = "{0:MM/dd/yyyy}"(即使请求正文也没有其他格式,也没有得到400 {"dob":"31/12/1990"}
Hassan Tareq

18

应用像这样的DataAnnotation:

[DisplayFormat(DataFormatString = "{0:MMM dd, yyyy}")]

10

使用此方法,但这是一个完整的解决方案:

[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]



1

这对我行得通

[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)]

0

在创建模型时使用以下代码设置属性,我认为您的问题将得到解决..并且时间不会出现在数据库中。您不需要添加任何注释。

private DateTime? dob;
        public DateTime? DOB
        {
            get
            {
                if (dob != null)
                {
                    return dob.Value.Date;
                }
                else
                {
                    return null;
                }

            }
            set { dob = value; }
        }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.