我有以下模型属性
[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/