2012-03-18 107 views
19

它们两者之间有什么区别。我以为他们是一样的,但今天我意识到他们不是。剃刀中的()(括号)和{}(大括号)之间的区别

为什么这是正确的

@(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"} 

回答

24

的括号只是一种外在表现,你会发现,你不需要一个分号。括号是一个代码块,可以像任何其他代码一样使用。表达式将其输出作为HTML的一部分提交,而代码块则不会。

菲尔哈克居然写了good primer on some Razor syntax

5

如果你熟悉的WebForms,它非常类似于<%之间=%>的差异(或<%:%>)和<%%>。前者被评估,然后输出到页面,后者是一块代码,可以做任何需要的东西(但不写入页面)。

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";} 
相关问题