2016-02-05 48 views
0

我經常使用這樣的代碼:剃刀,最短的條件塊

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

許多模板引擎對條件塊的特殊標記,例如鬍鬚,你可以這樣寫:

<p {{#Model.Sth}}style="display: none;"{{/Model.Sth}}>Some text</p> 

可以在我的剃刀代碼可以寫成更短的形式?

回答

2

在Razor中,您可以在括號內嵌入表達式來執行它們的內聯。如果你有條件可以使用三元運算符寫,那麼你可以做這樣的事情:

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

竅門就是剃刀發射得到的字符串正確地回到你的HTML。你可以使用HtmlHelper來做到這一點,但它會變得混亂,長條件條件更清潔。

然而,在屬性的特定情況下,Razor有一個特殊的特性,就像MVC4一樣,這將有所幫助。如果您在使用計算結果爲null表達式指定屬性,MVC也不會發射屬性可言,所以你可以做:

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

(請注意,nullstring.Empty在這種情況下不同:剃刀會發出style=""如果您的表達式計算爲空字符串。)