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

Ric*_*olo 23 asp.net-mvc razor asp.net-mvc-3

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

为什么这是正确的

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

这不是:

@{Model.WillAttend == true ? 
    "This will be an exciting party with you" : 
    "So sorry. You'll lose the beeer"}
Run Code Online (Sandbox Code Playgroud)

Jus*_*ony 25

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

Phil Haack实际上为一些Razor语法写了一篇很好的入门书


Lev*_*der 7

对于问题:“为什么第二个无效?”,除了 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";}
Run Code Online (Sandbox Code Playgroud)


Bet*_*tty 6

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