ASP.Net MVC DisplayFormat

Gav*_*vin 47 asp.net-mvc data-annotations

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

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

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

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

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

Bra*_*son 88

[DisplayFormat]属性仅用于EditorFor/DisplayFor,而不是像TextBoxFor这样的原始HTML API.

  • @bjan你设置了`ApplyFormatInEditMode`属性吗? (7认同)
  • 我使用MVC4 Razor语法,日期字段呈现为`@Html.EditorFor(m => m.IssueDate)`,模型上的格式应用为`[DisplayFormat(DataFormatString ="{0:dd/MM/yyyy}")]`但是日期仍显示为`01/01/0001 12:00:00 AM` (5认同)

Pau*_*son 28

正如Brad所说,它不适用于TextBoxFor,但如果你想让它适用于EditorFor,你还需要记住添加ApplyFormatInEditMode.

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

然后用

@Html.EditorFor(model => model.DateCreated)
Run Code Online (Sandbox Code Playgroud)


Tob*_*ias 8

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

实现自定义帮助程序 - 方法解决了我的问题:

带有DateTime-Property的ModelClass:

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

使用ModelClass作为模型查看:

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

静态助手类中的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);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果您只是为 DateTime 创建一个编辑器模板来执行您需要的操作,则可以继续使用 EditorFor。编辑器模板很好,因为从视图中您可以请求编辑器,而无需了解太多关于您将获得什么的信息,并且您可以通过更改编辑器模板随意更改所有编辑器以用于不同的控件。 (2认同)