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