ASP.NET MVC显示日期没有时间

时间:2011-07-06 07:59:06

标签: c# asp.net-mvc datetime attributes data-annotations

我的模型字段以下列方式装饰:

[DataType(DataType.Date)]
[Display(Name = "Date of birth")]
public string DateOfBirth { get; set; }

当我想使用以下代码在视图中显示值时:

<%: Html.DisplayFor(m => m.DateOfBirth) %>

问题是日期与时间值一起显示。我想知道为什么它不考虑DateType属性并且只显示没有时间的日期值。我知道我可以为DateTime创建一个显示模板,但在其他情况下,除了出生日期,我想与日期一起显示时间。如何解决问题?

7 个答案:

答案 0 :(得分:10)

您遇到的问题是您使用的是字符串值而不是DateTime。

将您的模型更改为:

[DataType(DataType.Date)]
[Display(Name = "Date of birth")]
public DateTime? DateOfBirth { get; set; }

DataType仅在它是DateTime类型时才起作用,您还可以获得额外的优势,即在使用DateTime时它会自动将其验证为有效日期。如果使用字符串,则必须使用正则表达式验证器以确保输入正确的日期。

答案 1 :(得分:9)

这应该用于编辑模式并显示

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

虽然它只是显示,但这可能有用

[DisplayFormat(DataFormatString = "{0:d}")]

答案 2 :(得分:4)

使用DisplayFormatAttribute表示显示值时的格式。此外,您可以创建两个DisplayTemplates,Date和DateTime,并使用UIHintAttribute指定模板

答案 3 :(得分:4)

您可以使用ToShortDateString()或ToLongDateString()来仅显示日期,例如:

@Model.EventDate.ToShortDateString()
@Model.EventDate.ToLongDateString()

答案 4 :(得分:2)

如果您的日期属于DateTime类型,并且ToShortDateString()ToLongDateString()仍然不起作用,请检查您的DateTime是否可为空(DateTime?)。使其不能为空可以解决问题。

答案 5 :(得分:0)

使用@Value和ToShortDateString(),您只能显示日期。

@Html.TextBoxFor(model => model.StartDate, "", new { id = "date", @class = "datepicker", @style = "width:70%; height:30px;", @placeholder = "Enter Date", @Value = @Model.StartDate.ToShortDateString()})

答案 6 :(得分:0)

如果您使用的是MVC,也许您可​​以在客户端脚本上尝试以下操作:

@{
      string birthDateOnly = Model.DateOfBirth.Date.ToShortDateString();
 }
@Html.DisplayTextFor(m => birthDateOnly)