Razor中()(括号)和{}(大括号)之间的差异

时间:2012-03-18 05:04:36

标签: asp.net-mvc asp.net-mvc-3 razor

他们俩之间有什么区别。我以为他们是一样的,但今天我意识到他们不是。

为什么这是正确的

@(Model.WillAttend == true ? 
    "This will be an exciting party with you" : 
    "So sorry. You'll lose the beeer")

而这不是:

@{Model.WillAttend == true ? 
    "This will be an exciting party with you" : 
    "So sorry. You'll lose the beeer"}

3 个答案:

答案 0 :(得分:25)

paren只是一个明确的表达,你会注意到你不需要分号。括号是一个代码块,可以像任何其他代码一样使用。表达式将其输出作为HTML的一部分提交,而代码块则不提供。

Phil Haack实际上写了good primer on some Razor syntax

答案 1 :(得分:6)

如果您熟悉WebForms,则与<%= %>(或<%: %>)和<% %>之间的区别非常相似。前者被评估然后输出到页面,后者是一个代码块,可以做任何需要的事情(但不写入页面)。

答案 2 :(得分:4)

对于问题:“为什么第二个无效?”,除了Betty和Justin所说的,特定于你所展示的问题:在花括号中你需要你的代码遵循c#的正常语法,所以你不能只是松散的“a == b?c:d”,而不是将结果分配给某些东西。你需要一个分号。所以你可以说

@{string message = Model.WillAttend == true ? 
     "This will be an exciting party with you" : 
     "So sorry. You'll lose the beeer";}