【发布时间】:2018-10-16 14:49:41
【问题描述】:
我有一个 ViewModel 类,其中包含一个名为 Duration 的列,其中包含两个 DatetTime 列之间的小时数(在查询中计算):
public Int32 Duration { get; set; }
我希望我可以使用注释来显示经过的时间量,以天和小时为单位(例如0d 15h)。
这不起作用:
[DisplayFormat(DataFormatString = "{0:dd hh}")]
使用TimeSpan的逻辑:
DateTime s;
DateTime.TryParse("2015-03-18 15:00:42.920",out s);
DateTime e;
DateTime.TryParse("2015-03-19 06:52:44.440",out e);
TimeSpan t = e - s;
Console.WriteLine(String.Format("{0}d {1}h", t.Days, t.Hours));
有没有办法使用数据注释(单独)来实现这一点?
【问题讨论】:
-
没有。数据注解必须是常量,不能这样计算。
-
也就是说,如果您的
Duration属性实际上是TimeSpan而不是int,您可以直接使用您的格式字符串。 -
@ChrisPratt,您是否建议使用一个直接映射到查询数据类型的模型(包括
Duration的Int32),然后使用 Automapper 将该数据集转换为视图模型有Duration作为TimeSpan? -
但是,您想要/需要这样做。简单地说,将您的属性作为 int,您不能使用
DisplayFormat来实现您正在寻找的格式,因为您无法执行必要的计算来到达那里。如果您的属性是TimeSpan,您可以成功使用DisplayFormat。如果您需要自定义视图模型来实现这一点,那么这就是您必须做的,或者只是手动进行计算和字符串格式化。
标签: asp.net-core asp.net-core-mvc asp.net-core-2.1