2012-03-18 18 views
19

¿Cuál es la diferencia entre los dos? Pensé que eran lo mismo, pero hoy me di cuenta de que no lo son.Diferencia entre() (paréntesis) y {} (llaves) en Razor

Por qué esto es correcto

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

y esto no es:

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

Respuesta

24

el paren es sólo una expresión explícita, y se dará cuenta de que no es necesario un punto y coma. Los corchetes son un bloque de código, para ser utilizado como cualquier otro código. Las expresiones tienen su resultado enviado como parte del HTML, mientras que los bloques de código no.

Phil Haack realmente escribió un good primer on some Razor syntax

5

Si está familiarizado con los formularios Web, es muy similar a la diferencia entre <% =%> (o <%:%>) y <%%>. El primero se evalúa y luego se envía a la página, este último es un bloque de código que puede hacer lo que necesita (pero no está escrito en la página).

4

A la pregunta: "¿por qué la segunda no es válida?", Además de lo que dicen Betty y Justin, los problemas específicos de lo que muestra: dentro de las llaves necesita su código para seguir la sintaxis normal de C# , por lo que no puede tener solo un "a == b? c: d" suelto, sin asignar el resultado a algo. Y necesitas un punto y coma. Por lo tanto, podría decir

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