我有 DisplayFor 以这种格式显示时间跨度值(持续时间):35.04:08:43.2470000 (dd.HH:mm:ss.fffff)。
我的目标是一个人类可读的字符串"HH:mm",所以我遵循了如何在 MVC Razor 中显示时间跨度和尝试在~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.票证.持续时间)"
System.FormatException 未由用户代码
处理 HResult=-2146233033 消息=输入字符串不正确 格式。 来源=mscorlib
我已经成功地为EditViews创建了DateTime模板,但我似乎无法使用TimeSpan类型的DisplayFor来解决这个问题。
我不知道自己在做什么,所以任何线索都值得赞赏! :)提前感谢!
阅读后 如何在 .NET 中使用自定义格式设置字符串格式 TimeSpan 对象?
我设法自己解决了这个问题,通过注释我的 TimeSpanTemplate,并简单地在我的模型中编辑这一行: [DisplayFormat(DataFormatString = "{0:HH:mm}", ApplyFormatInEditMode = true)]
自
[DisplayFormat(DataFormatString = "{0:%d}d {0:%h}h {0:%m}m {0:%s}s", ApplyFormatInEditMode = true)]
这不是解决这个问题的直接答案,但我认为最好使用 Humanizer 库。
您将能够执行以下操作:
SolvedDate.Humanize();
看这里: https://github.com/Humanizr/Humanizer#humanize-timespan
您的时间跨度可为空,因此请尝试:
<td>
@Html.Label("MyTimeSpan", Model.Ticket.Duration != null ? Model.Ticket.Duration.Value : string.Empty)
</td>