【问题标题】:MVC view displaying time when date only required仅需要日期时显示时间的 MVC 视图
【发布时间】:2013-06-14 05:48:55
【问题描述】:

我有以下模型属性

[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 时它可以工作,但我需要控制类属性。我究竟做错了什么?非常感谢。

【问题讨论】:

标签: asp.net-mvc-4


【解决方案1】:

当我应用 @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" })

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多