3.4. Условные операторы в представлениях .NET Core

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

Предыдущая глава

3.3. CS код в представлениях

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне