Во время отображения представления очень часто необходимо указывать какую-то логику, отображать данные в зависимости от каких-то условий, в общем использовать оператор 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#. Если нет, то могу лишний раз порекомендовать книгу Библия С#.