11

我正在尝试在 MVC 中格式化一些 DateTimes,但 DisplayFormat 没有应用于 Nullable 对象,我不知道为什么。它在 CreatedDateTime 但不是 LastModifiedDateTime

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yy hh:mm tt}")]
public DateTime CreatedDateTime { get; set; }
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yy hh:mm tt}")]
public Nullable<DateTime> LastModifiedDateTime { get; set; }

下面是视图

   <div class="editor-field">
        @Html.DisplayFor(model => model.CreatedDateTime)
        <br />
        @Html.Raw(TimeAgo.getStringTime(Model.CreatedDateTime))
    </div>
    @if (Model.LastModifiedDateTime.HasValue)
    { 
        <div class="editor-label">
            @Html.LabelFor(model => model.LastModifiedDateTime)
        </div>
        <div class="editor-field">
            @Html.DisplayFor(model => model.LastModifiedDateTime)
        <br />
            @Html.Raw(TimeAgo.getStringTime(Model.LastModifiedDateTime.Value)) By: @Html.DisplayFor(model => model.LastModifiedBy)
        </div>
    }
4

2 回答 2

9

如果我理解你的意图是正确的(我希望我做到了),那么你可以通过将你的模板放入Views/Shared/DisplayTemplates/DateTime.cshtml并定义它来获得 Nullable 的显示模板,如下所示:

@model System.DateTime?
@Html.Label("", Model.HasValue ? Model.Value.ToString("MM/dd/yy hh:mm tt") : string.Empty)

我希望这有帮助。

编辑

您可以为同一类型拥有多个显示模板,并按名称指定要使用的模板,因此假设您有:

  • Views/Shared/DisplayTemplates/Name1.cshtml
  • Views/Shared/DisplayTemplates/Name2.cshtml

然后你可以这样称呼他们:

@Html.DisplayFor(model => model.LastModifiedDateTime, "Name1")
@Html.DisplayFor(model => model.LastModifiedDateTime, "Name2")
于 2013-06-04T03:26:44.693 回答
1

我认为格式化可为空的最简单方法DateTime是使用ValueFor方法:

@Html.ValueFor(m => m.CreatedDateTime , "{0:MM/dd/yy hh:mm tt}")
@Html.ValueFor(m => m.LastModifiedDateTime , "{0:MM/dd/yy hh:mm tt}")

当使用ValueFor带有TimeSpanor的方法时Nullable<TimeSpan>,冒号“:”必须被转义:

@Html.ValueFor(m => m.MyTimeSpan, "{0:hh':'mm}")
于 2017-01-18T10:09:01.800 回答