MVC视图显示仅需要日期的时间

时间:2013-06-18 06:10:52

标签: asp.net-mvc-4

我有以下模型属性

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

和以下观点:

@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属性。我究竟做错了什么?非常感谢你。

1 个答案:

答案 0 :(得分:3)

  

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

没什么,这是事情的运作方式。只有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" })

现在用一颗子弹杀死了2只兔子:

  • 我们应用了所需的格式
  • 我们将所需的类应用于输入字段

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