49

在我的模型中,我的一个属性上有以下 DataAnnotations

[Required(ErrorMessage = "*")]
[DisplayFormat(DataFormatString = "{0:d}")]
[DataType(DataType.Date)]
public DateTime Birthdate { get; set; }

所需的注释效果很好,我添加了另外 2 个来尝试删除时间。它使用绑定到视图中的输入

<%=Html.TextBoxFor(m => m.Birthdate, new { @class = "middle-input" })%>

但是,每当加载视图时,我仍然会在输入框中显示时间。无论如何使用DataAnnotations删除它?

4

3 回答 3

90

[DisplayFormat] 属性仅在 EditorFor/DisplayFor 中使用,而在 TextBoxFor 等原始 HTML API 中不使用。

于 2010-01-05T07:56:14.903 回答
29

正如布拉德所说,它不适用于 TextBoxFor,但如果您希望它适用于 EditorFor,您还需要记住添加 ApplyFormatInEditMode。

[DataType(DataType.Date), DisplayFormat( DataFormatString="{0:dd/MM/yy}", ApplyFormatInEditMode=true )]
public System.DateTime DateCreated { get; set; }

然后使用

@Html.EditorFor(model => model.DateCreated)
于 2012-04-30T09:36:00.780 回答
8

我的问题是设置一些 html 属性(jquery-datepicker),所以 EditorFor 对我来说是没有选择的。

实现自定义辅助方法解决了我的问题:

具有 DateTime-Property 的 ModelClass:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:dd.MM.yyyy}", ApplyFormatInEditMode = true)]
public DateTime CustomDate{ get; set; }

以 ModelClass 作为模型查看:

@Html.TextBoxWithFormatFor(m => m.CustomDate, new Dictionary<string, object> { { "class", "datepicker" } })

静态助手类中的 Helper-Methode:

public static class HtmlHelperExtension {
    public static MvcHtmlString TextBoxWithFormatFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IDictionary<string, object> htmlAttributes) {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
        return htmlHelper.TextBox(htmlHelper.ViewData.TemplateInfo.GetFullHtmlFieldName(metadata.PropertyName), string.Format(metadata.DisplayFormatString, metadata.Model), htmlAttributes);
    }
}
于 2014-02-27T14:14:46.910 回答