在通用时间跨度转换器上使用 DisplayFor
Using DisplayFor on a Generic TimeSpan Converter
我有一个摘要页面,它计算数据库中存储项目的几个平均时间和总时间。所有计算都有效,但由于计算平均值的方式,这些值存储为表示分钟数的双精度值。此处的目标是在 Razor 页面上显示平均值和总计时将其转换为 HH:MM:SS 格式。
我从这里开始。
How to display a TimeSpan in MVC Razor
为我必须显示的每个平均值和总数创建一个助手 class 似乎是一种不好的做法,所以我使用一种方法使解决方案更通用。
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>
此外,我建议使用单独的 class(甚至是扩展方法),而不是将 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>
这样您就可以在需要时将其与另一个 class 重复使用。
我有一个摘要页面,它计算数据库中存储项目的几个平均时间和总时间。所有计算都有效,但由于计算平均值的方式,这些值存储为表示分钟数的双精度值。此处的目标是在 Razor 页面上显示平均值和总计时将其转换为 HH:MM:SS 格式。
我从这里开始。
How to display a TimeSpan in MVC Razor
为我必须显示的每个平均值和总数创建一个助手 class 似乎是一种不好的做法,所以我使用一种方法使解决方案更通用。
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>
此外,我建议使用单独的 class(甚至是扩展方法),而不是将 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>
这样您就可以在需要时将其与另一个 class 重复使用。