我有一个摘要页面,它根据数据库中存储的项目计算几个平均时间和总时间。所有的计算都有效,但由于平均值的计算方式,这些值被存储为表示分钟数的双倍值。这里的目标是在Razor页面上显示平均值和总数时将其转换为HH:MM:SS格式。
我从这里开始。
如何在MVC Razor 中显示TimeSpan
为我必须显示的每一个平均值和总数创建一个助手类似乎是一种糟糕的做法,所以我用一个方法使解决方案更加通用。
public string TSConvert(double minutes)
{
return TimeSpan.FromMinutes(minutes).ToString(@"hh:mm:ss");
}
所以这是
<td>
@item.TSConvert(item.SalesAverageTime)
</td>
这不是
<td>
@Html.DisplayFor(modelItem => item.TSConvert(item.SalesTotalTime))
</td>
具体来说,我看到以下错误:
InvalidOperationException:模板只能与字段访问、属性访问、一维数组索引或单参数自定义索引器表达式一起使用
有没有办法让这个方法和DisplayFor配合得很好?如果没有,那么像我上面所做的那样围绕DisplayFor是否有很大的影响?
这里发生了一些不同的事情:
错误是因为您没有使用DisplayFor来显示对象属性。请使用@Html.Raw:
<td>
@Html.Raw(item.TSConvert(item.SalesTotalTime))
</td>
此外,我建议使用一个单独的类(甚至扩展方法(,而不是将convert方法放在对象上。例如:
public class TimeUtils {
public static string TSConvert(double minutes)
{
return TimeSpan.FromMinutes(minutes).ToString(@"hh:mm:ss");
}
}
然后称之为:
<td>
@Html.Raw(TimeUtils.TSConvert(item.SalesTotalTime))
</td>
这样,如果需要的话,你可以将它与另一个类一起重用