Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在通用时间跨度转换器上使用DisplayFor_C#_Entity Framework Core_Razor Pages_Asp.net Core 3.1_Displayfor - Fatal编程技术网

C# 在通用时间跨度转换器上使用DisplayFor

C# 在通用时间跨度转换器上使用DisplayFor,c#,entity-framework-core,razor-pages,asp.net-core-3.1,displayfor,C#,Entity Framework Core,Razor Pages,Asp.net Core 3.1,Displayfor,我有一个摘要页面,它计算数据库中存储项的平均和总时间。所有的计算都是有效的,但是由于平均值是如何计算的,所以这些值被存储为表示分钟数的双精度值。这里的目标是在Razor页面上显示平均值和总计时将其转换为HH:MM:SS格式 我从这里开始 为我必须显示的每一个平均值和总数创建一个helper类似乎是一种不好的做法,因此我使用了一种方法使解决方案更加通用 public string TSConvert(double minutes) { return Tim

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

我从这里开始

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

public string TSConvert(double minutes)
        {
            return TimeSpan.FromMinutes(minutes).ToString(@"hh\:mm\:ss");
        }
所以这是有效的

<td>
     @item.TSConvert(item.SalesAverageTime)
</td>

@item.TSConvert(item.SalesAverageTime)
这是不可能的

<td>
     @Html.DisplayFor(modelItem => item.TSConvert(item.SalesTotalTime))
</td>

@DisplayFor(modeleItem=>item.TSConvert(item.SalesTotalTime))
具体而言,我看到以下错误:

InvalidOperationException:模板只能用于字段访问、属性访问、一维数组索引或单参数自定义索引器表达式


有没有一种方法可以让这个方法很好地与DisplayFor配合使用?如果不是的话,像我上面所做的那样在DisplayFor周围走动会有很大的影响吗?

这里发生了两件不同的事情:

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

<td>
     @Html.Raw(item.TSConvert(item.SalesTotalTime))
</td>
那么就这样称呼它:

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

@Html.Raw(TimeUtils.TSConvert(item.SalesTotalTime))

这样,如果需要,您可以将它与另一个类一起重用。

因此,当我尝试使用modelItem调用该方法时,使用modelItem=>item.,Lamda表达式似乎是正确的。我得到以下生成错误:错误CS1061“OnboardingModel”不包含“SalesTotalTime”的定义,并且找不到接受“OnboardingModel”类型的第一个参数的可访问扩展方法“SalesTotalTime”(是否缺少using指令或程序集引用?)将函数分支为TSUtils是一个很好的调用,对总小时数进行了一些调整,使其大于24-
公共类TimeUtils{public static string TSConvert(双分钟){TimeSpan ts=TimeSpan.FromMinutes(分钟);返回string.Format({0}:{1:mm}:{1:ss}),(int)ts.TotalHours,ts);}}
项目来自哪里?一个foreach循环?不幸的是,您可以使用如下@Html.Raw(TimeUtils.TSConvert(item.SalesTotalTime))之类的方法,在DisplayFor like so中调用TimeUtils方法
@Html.DisplayFor(modelItem=>TimeUtils.TSConvert(item.SalesTotalTime))
..仍然会生成与访问页面时最初描述的相同的错误InvalidOperationException:模板只能用于字段访问、属性访问、一维数组索引、,或单参数自定义索引器表达式使用@Html.Raw()。DisplayFor仅用于将输出模板应用于属性或字段。看见
<td>
     @Html.Raw(TimeUtils.TSConvert(item.SalesTotalTime))
</td>