2012-03-18 24 views
19

Qual è la differenza tra entrambi. Pensavo fossero uguali ma oggi mi sono reso conto che non lo sono.Differenza tra() (parentesi) e {} (parentesi graffe) in Rasoio

Perché questo è corretto

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

e questo non è:

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

risposta

24

La parentesi è solo un'espressione esplicita, e si noterà che non hai bisogno di un punto e virgola. Le parentesi sono un blocco di codice, da utilizzare come qualsiasi altro pezzo di codice. Le espressioni hanno il loro output inviato come parte dell'HTML, mentre i blocchi di codice no.

Phil Haack in realtà ha scritto una good primer on some Razor syntax

5

Se avete familiarità con WebForms, è molto simile alla differenza tra <% =%> (o <%:%>) e <%%>. Il primo viene valutato poi emesso nella pagina, il secondo è un blocco di codice che può fare tutto ciò di cui ha bisogno (ma non è scritto nella pagina).

4

Alla domanda: "perché il secondo non è valido?", Oltre a quello che dicono Betty e Justin, i problemi specifici di ciò che si mostra: all'interno di parentesi graffe è necessario il codice per seguire la normale sintassi di C# , quindi non puoi avere un solo "a == b? c: d", senza assegnare il risultato a qualcosa. E hai bisogno di un punto e virgola. Quindi potresti dire

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