Во время отображения представления очень часто необходимо указывать какую-то логику, отображать данные в зависимости от каких-то условий, в общем использовать оператор if или switch. И то и другое возможно в представлениях.
Как и с выводом данных все начинается с магического символа @, после которого идет оператор If без каких-либо отступов. Снова этот магический символ @, который как бы переводит систему в режим CS кода и парсер начинает искать CS код.
@if (Model.Age < 15) { <p>Классно быть молодым, но сайт только для старше 15</p> } else { <p>Все отлично</p> }
Извиняюсь, пример может быть не супер логичный, но главное наглядный. Как видишь символ @ необходим только перед оператором if. Перед else ничего ставить не нужно, потому что он должен идти сразу же после закрывающей фигурной скобки. Если else нет, а идут какие-то HTML тэги или просто текст, то фреймворк возвращается к отображению HTML и не воспринимает больше последующий текст, как CS код.
@if {} как и @{} переводит парсер в режим кода и все, что находится внутри фигурных скобок по умолчанию будет восприниматься как CS код.
Внутри фигурных скобок мы можем перейти как бы в режим HTML (я не знаю, правильно будет говорить режим, а то сейчас хейтеры батаны налетят и начнут умничать), когда все воспринимается как текст, если указать тэги. В нашем случае парсер cshtml файлов видит, что это точно текст, потому что он обрамлен в HTML тэги и начинает просто выводить текст.
Как только закончится текущий html тег фреймворк возвращается в режим выполнения кода и ищет CS инструкции или закрывающую фигурную скобку. Закрывающая фигурная скобка тоже является частью CS, поэтому переход в режим кода вполне логичен.
else { <p>отлично</p& int index = 10; <p>index = @index</p> }
Здесь в else три строки – html строка. По окончанию html начинается cs код, который корректен и его можно выполнить. Третья строка снова HTML код, потому что начинает с корректного тэга.
Вот так вот html тэги переключают фреймворк с режима выполнения кода на режим отображения HTML и обратно. В тех случаях, когда среди HTML нам нужно выполнить CS, мы всегда можем насильно сделать это, написав:
@{ // html код }
В большинстве языков программирования есть if else, чтобы было больше двух вариантов выбора и в Razor это тоже возможно:
@if (Model.Age < 15) { <p>Классно быть молодым, но сайт только для старше 15</p> } else if (Model.Age < 18) { <p>Все возможно, но с ограничениями</p> } else { <p>Все отлично</p> }
Здесь у нас выводиться разное сообщение в зависимости от того, какой возраст у человека:
- до 15
- от 15 до 18
- старше 18
В Razor также есть возможность использовать оператор switch, который работает идентично C# аналогу:
@switch (value) { case 1: <p>Это первый случай</p> break; case 2: <p>Это второй случай</p> break; default: <p>Ну и случай по умолчанию</p> break; }
Не думаю, что тут нужны какие-то дополнительные комментарии для всех, кто уже знаком с C#. Если нет, то могу лишний раз порекомендовать книгу Библия С#.