TextBoxFor Date对象始终显示时间元素

Nei*_*ski 4 asp.net-mvc-3

我在MVC 3中显示/编辑日期时遇到问题.

我已经设置了我的数据类属性如下(数据实际上是由Linq2Sql对象提供的):

[DisplayName("Date of Birth")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}", NullDisplayText = "")]
public DateTime DoB { get; set; }
Run Code Online (Sandbox Code Playgroud)

在视图中,我有:

@Html.TextBoxFor(m => m.DoB, new { @class = "date" })
Run Code Online (Sandbox Code Playgroud)

问题是,文本框总是显示日期的时间部分,例如'18/10/2010 00:00:00'

我知道我可以通过使用标准的Html.TextBox来解决这个问题

@Html.TextBox("DoB", Model.DoB.ToShortDateString())
Run Code Online (Sandbox Code Playgroud)

但我真的希望能够从数据模型中控制它.

我在网上发现的文章表明这​​是有效的,但我不能重复他们的成功.

任何帮助/建议将不胜感激.

Dar*_*rov 5

如果您希望数据注释属性DisplayFormat具有任何效果,则应使用:

@Html.EditorFor(m => m.DoB)
Run Code Online (Sandbox Code Playgroud)

查看Brad Wilson 的以下博客文章,其中解释了模型元数据在ASP.NET MVC中的工作原理.

缺点是现在你不能再指定类了.一种可能的解决方案是这样做:

<div class="input-date">
    @Html.EditorFor(m => m.DoB)
</div>
Run Code Online (Sandbox Code Playgroud)

然后风格:

.input-date input {
    ...
}
Run Code Online (Sandbox Code Playgroud)

或者您也可以编写自定义DataAnnotationsModelMetadataProvider,它允许您使用数据注释指定类,大小,最大长度等属性.