剃刀,最短的条件块

时间:2016-02-05 15:13:46

标签: asp.net-mvc razor

我经常使用以下代码:

for (i=0; i<4; i++) {
  Serial.print(myByteArray[i]);
  Serial.print("."); //delimiter
}

许多模板引擎都有条件块的特殊标记,例如在Mustache中你可以编写:

<p @if(Model.Sth)
{
    ?:style="display: none;"
}>Some text</p>

我的Razor代码可以用更短的形式编写吗?

1 个答案:

答案 0 :(得分:3)

在Razor中,您可以在括号内嵌入表达式以内联执行它们。如果您的条件可以使用三元运算符编写,那么您可以执行以下操作:

@(this.Model.Sth ? "style='display:none;'" : string.Empty)

诀窍是让Razor将生成的字符串正确地发回到HTML中。您可以使用HtmlHelper来执行此操作,但它变得非常混乱,以至于长格式条件更清晰。

然而,在属性的特定情况下,Razor的一个特殊功能,如MVC4,将有所帮助。如果使用计算结果为null的表达式指定属性,则MVC根本不会发出该属性,因此您可以这样做:

<p style="@(this.Model.Sth ? "display:none;" : null)">Some Text</p>

(请注意,nullstring.Empty在这种情况下是不同的:如果表达式的计算结果为空字符串,Razor将发出style=""。)