C# 如何在ForEach语句中使用@Html.DisplayFor

C# 如何在ForEach语句中使用@Html.DisplayFor,c#,asp.net-mvc,razor,html-helper,C#,Asp.net Mvc,Razor,Html Helper,我试图在@ForEach语句中使用@HTML.DisplayFor,但未成功 以下是我现有的代码: @foreach (var cost in Model.CustomerCost) { <tr> <td>@cost .CustomerName</td> <td>@(cost.Cost!= 0 ? string.Format("{0:C}", cost.Cost) + " USD" : "-")</td

我试图在
@ForEach
语句中使用
@HTML.DisplayFor
,但未成功

以下是我现有的代码:

@foreach (var cost in Model.CustomerCost)
{
    <tr>
        <td>@cost .CustomerName</td>
        <td>@(cost.Cost!= 0 ? string.Format("{0:C}", cost.Cost) + " USD" : "-")</td>
    </tr>
}
@foreach(Model.CustomerCost中的var成本)
{
@成本.客户名称
@(cost.cost!=0?string.Format(“{0:C}”,cost.cost)+“USD”:“-”)
}
但是,我正在尝试替换以下代码行

<td>@(cost.Cost!= 0 ? string.Format("{0:C}", cost.Cost) + " USD" : "-")</td>
@(cost.cost!=0?string.Format(“{0:C}”,cost.cost)+“USD”:“-”)

@HTMLDisplayFor
@(cost.cost!=0?Html.DisplayFor(model=>model.CustomerCost[cost]。成本+“USD”:“-”)

@HTML.DisplayFor syntax中有什么错误?

要访问
Cost
Cost
属性,请使用

@(cost.Cost != 0 ? Html.DisplayFor(m => cost.Cost) + "USD":"-")

旁注:您可能想考虑属性<代码>成本<代码>可空,并在属性

上使用<代码> DePosiFrase<代码>属性。
[DisplayFormat(DataFormatString = "{0:C}USD", NullDisplayText = "-")]
public decimal? Cost { get; set; }
在这种情况下,可以将视图简化为

@Html.DisplayFor(m => cost.Cost)
另请注意,您使用的格式将用于
for
循环,其中
cost
是索引器

for(int i = 0; i < Model.CustomerCost.Count; i++)
{
  @Html.DisplayFor(m => m.CustomerCost[i].Cost)
}
for(int i=0;im.CustomerCost[i].Cost)
}

谢谢你的解释。我现在明白了。也谢谢你告诉我如何使用数据注释处理nullable。刚刚添加了另一个解释供参考:)谢谢Stephen Muecke:)@Stephan,我在模型中使用了[DisplayFormat(DataFormatString=“{0:C0}”,NullDisplayText=“-”),而不是@Html.DisplayFor(m=>cost.cost)------它显示0表示可为空,但不显示“-”。。。有什么想法吗?我认为在我的例子中,它不是null而是0.0,所以NullDisplayText在这里不起作用。如果我错了,请纠正我。
NullDisplayText
的使用仅适用于可为空的类型,因此您的属性必须是
public decimal?Cost{get;set;}
(或
可为null
),并且属性的值必须为
null
。我只是添加了那个旁注,因为我有点困惑,为什么要将零值显示为
“-”
,而不是
“$0.00USD”
for(int i = 0; i < Model.CustomerCost.Count; i++)
{
  @Html.DisplayFor(m => m.CustomerCost[i].Cost)
}