0

我有一个摘要页面,它计算数据库中存储项目的几个平均和总时间。所有计算都有效,但由于计算平均值的方式,这些值存储为表示分钟数的双精度值。此处的目标是在 Razor 页面上显示平均值和总计时将其转换为 HH:MM:SS 格式。

我从这里开始。

如何在 MVC Razor 中显示时间跨度

为我必须显示的每个平均值和总数创建一个辅助类似乎是一种不好的做法,因此我使用一种方法使解决方案更加通用。

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 会产生很大的影响吗?

4

1 回答 1

1

这里发生了一些不同的事情:

该错误是因为您没有使用 DisplayFor 来显示对象属性。而是使用@Html.Raw:

<td>
     @Html.Raw(item.TSConvert(item.SalesTotalTime))
</td>

此外,我建议不要将转换方法放在您的对象上,而是使用单独的类(甚至是扩展方法)。例如:

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>

这样,如果需要,您可以在另一个类中重用它。

于 2020-09-09T18:39:42.027 回答