ASP.NET MVC如何在不显示时间的情况下显示日期

20

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

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

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

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

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

7个回答

18

你的问题在于你使用了字符串而非 DateTime 类型。

将你的模型更改为:

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

只有在使用DateTime类型时,DataType才有效。使用DateTime类型的另一个好处是,在使用DateTime类型时,它将自动验证为有效日期。如果使用字符串,则必须使用正则表达式验证器确保输入了正确的日期。


最近我遇到了一个问题,当输入类型是日期时,Chrome 会在其中放入一些有趣的东西,这是 HTML5 的一部分。我想使用 jQuery 日期选择器替代它,所以我选择 DataType.Text - 这仍然允许我使用很酷的格式化。 - John
@John - “有趣的东西”?那是HTML标准的一部分。如果你正在使用HTML5,应该使用HTML5输入类型。很可能,你只是没有理解某些东西,而不是做正确的事情,现在你已经破坏了MVC的日期处理。 - Erik Funkenbusch
不,我的意思是Chrome添加了日期选择器,但它们的外观不如我更喜欢的jQuery版本。 - John

13

这样做应该可以实现编辑模式和显示模式。

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

虽然仅限于展示的话,这可能可行。

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

@MystereMan,我想你知道自己在做什么。这可能不是必要的,但你肯定知道你必须比你在这里的评论更具体。它们对于一般知识有什么贡献?我会投票支持你更好的回答。 - dove
@MystereMan,所以SO缓存刷新可能并不完美。现在看到了。 - dove
太棒了!如此简单,解决了我的问题。谢谢! - Rui Craveiro
太棒了,我为这个问题苦恼了很久。 - Jon649

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

6

2
如果您的日期是DateTime类型,并且使用ToShortDateString()或ToLongDateString()仍然无法正常工作,请检查您的DateTime是否可为空(DateTime?)。将其更改为非空可能会解决问题。

1

如果您正在使用MVC,也许可以在客户端脚本上尝试这个:

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

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()})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接