【发布时间】:2016-07-04 00:36:07
【问题描述】:
我有 DisplayFor 以这种格式显示时间跨度值(持续时间): 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>
我得到这个编译格式异常错误:
输入字符串的格式不正确。 --> "@Html.DisplayFor(modelItem => item.Ticket.Duration)"
System.FormatException 未被用户代码处理
HResult=-2146233033 Message=输入字符串不正确 格式。来源=mscorlib
我已经成功地为 EditViews 创建了 DateTime-templates,但我似乎无法在 DisplayFor 上使用 TimeSpan-types 解决这个问题。
我不知道我在做什么,所以任何线索都值得赞赏! :) 提前致谢!
【问题讨论】:
-
如果您将
Duration属性设为TimeSpan(而不是TimeSpan?),您的问题会消失吗?我怀疑这是因为您的模板声明为TimeSpan而不是Nullable<TimeSpan>。 -
我认为您是对的,可空部分可能是问题的一部分。我需要可空时间跨度,因为我的数据库中的某些记录还没有持续时间。
-
您不应该从
modelItem而不是item获得票吗?@Html.DisplayFor(modelItem => modelItem.Ticket.Duration) -
这与我的问题并不真正相关,但不是 - 我的 foreach 循环状态 '@foreach (var item in Model) { }'
-
我的主要问题是 - 如何将我的日期时间从我的视图模板转换为字符串而不会出现格式异常错误? :)
标签: c# asp.net-mvc razor timespan displayfor