我有以下模型属性

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:d/M/yyyy}", ApplyFormatInEditMode = true)]
[Display(Name = "Date of Screening")]
public DateTime? ScreeningDate { get; set; }

和以下 View :
@Html.TextBoxFor(model => model.ScreeningDate, new { @class="date maintainState" })

但是我得到了文本框的这个标记:
 <input value="18/06/2013 12:00:00 AM" class="date maintainState" ... type="text"  />

我希望值是18/06/2013

当我应用@ Html.EditorFor时,它可以工作,但是我需要控制class属性。我究竟做错了什么?非常感谢你。

最佳答案

当我应用@ Html.EditorFor时,它可以工作,但是我需要控制
类属性。我究竟做错了什么?

没事,这就是事情的运作方式。只有EditorFor和DisplayFor助手会尊重[DisplayFormat]属性。

我了解您使用的是TextBoxFor,因为您想将自定义类应用于该字段,而EditorFor不允许您这样做。但这不是事实。 EditorFor帮助程序所做的全部工作就是渲染相应的编辑器模板。如果没有自定义模板,它将呈现默认模板。

所以呢?

好了,您为DateTime类型编写了一个自定义编辑器模板,该模板将按照您希望的方式运行。就像~/Views/Shared/EditorTemplates/DateTime.cshtml中那样:

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData)

然后简单地:
@Html.EditorFor(model => model.ScreeningDate, new { @class="date maintainState" })

现在用一颗子弹杀死了两只兔子:
  • 我们应用了所需的格式
  • 我们将所需的类应用于输入字段

  • 而且,如果您想杀死第三只兔子并在提交表单时能够验证此自定义格式(因为请记住,默认模型绑定(bind)程序不太关心此[DisplayFormat]属性),则可以编写一个将尊重[DisplayFormat]属性,就像我在这里解释的那样:https://stackoverflow.com/a/7836093/29407

    关于asp.net-mvc-4 - MVC View 显示仅需要日期的时间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17161672/

    10-10 07:20