0

我有 DisplayFor 以这种格式显示时间跨度值(持续时间):35.04:08:43.2470000 (dd.HH:mm:ss.fffffff)。

我的目标是一个人类可读的字符串“HH:mm”,所以我按照如何在 MVC Razor 中显示 TimeSpan 并尝试在 ~views/Shared/TimeSpanTemplate.cshtml 中制作一个 DisplayTemplate:

@model TimeSpan
@{
    TimeSpan initialValue = Model;
}
@string.Format("{0}:{1}", (initialValue.Days * 24) + initialValue.Hours, initialValue.Minutes)

@Scripts.Render("~/bundles/bootstrap")

这是我的模型:

[DisplayFormat(DataFormatString = "{0:HH:mm}", ApplyFormatInEditMode = true)]
[DisplayName("Varighed")]
public virtual TimeSpan? Duration
{
   get {
      return SolvedDate.HasValue ? (TimeSpan?)SolvedDate.Value.Subtract(ReportedDate) : null;        }
}

这是我的看法:

<td>
    @Html.DisplayFor(modelItem => item.Ticket.Duration)
</td>

我得到这个编译格式异常错误:

输入字符串的格式不正确。--> "@Html.DisplayFor(modelItem => item.Ticket.Duration)"

System.FormatException 未被用户代码处理
HResult=-2146233033 消息=输入字符串的格式不正确。源=mscorlib

我已经成功地为 EditViews 创建了 DateTime 模板,但我似乎无法在 DisplayFor 上使用 TimeSpan 类型解决这个问题。

我不知道我在做什么,所以任何线索都值得赞赏!:) 提前致谢!

4

3 回答 3

1

在阅读了如何在 .NET 中使用自定义格式对 TimeSpan 对象进行 String.Format 之后?

我设法自己解决了这个问题,通过评论我的 TimeSpanTemplate,并简单地在我的模型中编辑这一行:[DisplayFormat(DataFormatString = "{0:HH:mm}", ApplyFormatInEditMode = true)]

[DisplayFormat(DataFormatString = "{0:%d}d {0:%h}h {0:%m}m {0:%s}s", ApplyFormatInEditMode = true)]

于 2016-03-18T09:47:43.527 回答
0

您的 Timespan 可以为空,因此请尝试:

<td>
    @Html.Label("MyTimeSpan", Model.Ticket.Duration != null ? Model.Ticket.Duration.Value : string.Empty)
</td>
于 2016-03-17T15:10:11.577 回答
0

这不是解决这个问题的直接答案,但我认为使用Humanizer库会更好。

您将能够执行以下操作:

SolvedDate.Humanize();

见这里:https ://github.com/Humanizr/Humanizer#humanize-timespan

于 2016-03-17T15:07:49.837 回答