2015-08-15 46 views
0

存在以下剃须刀代码。使用Html.DisplayFor()时的较短和较少冗长条件

<p>@Html.DisplayFor(modelitem => item.Price)</p> 

现在,当价格为0时,我需要显示文本“Free”。所以我做了以下操作。

<p> 
    @(item.Price == 0 ? "Free" : string.Format("{0:$0.00}", item.Price)) 
</p> 

它看起来很冗长。有没有更好的方法来做到这一点?

+0

为什么不使用显示模板? –

+0

如果你使用视图模型,你可以使属性为空,并使用'[DisplayFormat]'属性 –

+0

@ dc7a9163d9的'NullDisplayText'属性,它工作吗?它是否生成该项目的HTML? –

回答

0

在模型中尝试[DisplayFormat(NullDisplayText = "FREE")]

+0

我不想改变模型,因为我想在其他地方显示0(该字段不能为空)为0。 – ca9163d9

1

您可以使用DisplayTemplates,所以首先在创建模板(~/Views/Shared/DisplayTemplates/Price.cshtml):

@model float 
<div> 
    @(Math.Abs(Model) < 1 ? "Free" : string.Format("{0:$0.00}", Model)) 
</div> 

然后用这样的方式:

@Html.DisplayFor(p => item.Price, "Price") 
0

你可以写ExtensionMethods for htmlHelper检查您的情况并运行适当的DisplayFor()