我有DisplayFor以这种格式显示TimeSpan值(持续时间): 35.04:08:43.2470000(dd.HH:mm:ss.fffffff)。
我的目标是一个人类可读的字符串“HH:mm”,所以我跟着How to display a TimeSpan in 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>
我得到了这个编译格式异常错误:
输入字符串的格式不正确。 - &GT; “@ Html.DisplayFor(modelItem =&gt; item.Ticket.Duration)”
System.FormatException未被用户代码
处理 HResult = -2146233033消息=输入字符串不正确 格式。源= mscorlib程序
我已经成功为EditViews创建了DateTime-templates,但我似乎无法在使用TimeSpan类型的DisplayFor上解决这个问题。
我不知道自己在做什么,所以任何线索都值得赞赏! :) 提前谢谢!
答案 0 :(得分:0)
答案 1 :(得分:0)
您的Timespan可以为空,请尝试:
<td>
@Html.Label("MyTimeSpan", Model.Ticket.Duration != null ? Model.Ticket.Duration.Value : string.Empty)
</td>
答案 2 :(得分:0)
阅读How can I String.Format a TimeSpan object with a custom format in .NET?
后我设法通过取消我的TimeSpanTemplate来解决这个问题,只需在我的模型中编辑此行:[DisplayFormat(DataFormatString = "{0:HH:mm}", ApplyFormatInEditMode = true)]
到
[DisplayFormat(DataFormatString = "{0:%d}d {0:%h}h {0:%m}m {0:%s}s", ApplyFormatInEditMode = true)]