Подтвердить что ты не робот

Разница между() (скобки) и {} (фигурные скобки) в 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"}
4b9b3361

Ответ 1

Параметр - это просто явное выражение, и вы заметите, что вам не нужна точка с запятой. Скобки - это кодовый блок, который можно использовать как любой другой фрагмент кода. Выражения выводятся как часть HTML, тогда как в блоках кода нет.

Фил Хаак на самом деле написал хороший пример для синтаксиса Razor

Ответ 2

Если вы знакомы с WebForms, это очень похоже на разницу между <% =% > (или <%:% > ) и <%% > . Первая оценивается, а затем выводится на страницу, последняя представляет собой блок кода, который может делать все, что ему нужно (но не записывается на страницу).

Ответ 3

На вопрос: "почему второй недействителен?", в дополнение к тому, что говорят Бетти и Джастин, проблемы, характерные для того, что вы показываете: внутри фигурных скобок вам нужен ваш код, чтобы следовать нормальному синтаксису С#, поэтому у вас не может быть просто "a == b? c: d", не присваивая результат чему-то. И вам нужна точка с запятой. Таким образом, вы могли бы сказать

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