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

时间:2011-03-09 21:43:33

标签: 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; }

在视图中,我有:

@Html.TextBoxFor(m => m.DoB, new { @class = "date" })

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

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

@Html.TextBox("DoB", Model.DoB.ToShortDateString())

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

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

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

3 个答案:

答案 0 :(得分:5)

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

@Html.EditorFor(m => m.DoB)

查看Brad Wilson的following blog post,其中解释了模型元数据在ASP.NET MVC中的工作原理。

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

<div class="input-date">
    @Html.EditorFor(m => m.DoB)
</div>

然后风格:

.input-date input {
    ...
}

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

答案 1 :(得分:0)

正确使用是[DataType(DataType.Date)]

答案 2 :(得分:0)

我偶然发现了这个并遇到了同样的问题。我发现拆分显示和模型值允许我以任何我希望的格式处理日期的显示:

exit()

这允许我将值绑定到模型和从模型绑定,但我可以处理输出格式。

相关问题