在强类型视图中格式化可为空的DateTime字段

Lor*_*nzo 2 asp.net-mvc defaultmodelbinder asp.net-mvc-2

我在我的模型中定义了一个带有BornDate属性的Person类

[DisplayName("Born Date")]
public DateTime? BornDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

我在我的视图中使用此字段

<td style="white-space:nowrap">
    <%= Html.LabelFor(model => model.BornDate)%>
    <br />
    <%= Html.TextBoxFor(model => model.BornDate, new { id = "bornDate" })%>
    <%= Html.ValidationMessageFor(model => model.BornDate, "*")%>
</td>
Run Code Online (Sandbox Code Playgroud)

问题是,当我使用BornDate文本框编辑Person实例时,格式为

dd/MM/yyyy hh.mm.ss
Run Code Online (Sandbox Code Playgroud)

虽然我想在没有时间部分("dd/MM/yyyy")的情况下格式化它.我无法将toString方法与格式字符串一起使用,因为它是可以为空的字段.

我能做什么?

Jam*_*ull 11

您应该能够使用Value.请先检查它是否为空.

var displayDate = model.BornDate.HasValue ? model.BornDate.Value.ToString("yyyy") : "NoDate";
Run Code Online (Sandbox Code Playgroud)


dav*_*son 9

我知道这已经很晚了,但我正在研究另一个问题并遇到了这个问题.有一种方法只显示不需要表示层格式的日期部分.

[DisplayName("Born Date")]
[DataType(DataType.Date)]
public DateTime? BornDate { get; set; }
Run Code Online (Sandbox Code Playgroud)

使用此选项将确保在View上绑定到此属性的任何位置,仅显示日期

希望这有助于某人


bra*_*ler 6

要在VIEW中执行此操作,您还可以使用Razor语法:

 @Html.TextBox("BornDate", item.BornDate.HasValue ? item.BornDate.Value.ToShortDateString():"")