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

Если мы посмотрим в представление, которое для нас сгенерировал Visual Studio, то возможно у вас будет две магические строчки, которые стоит рассмотреть:

@{
}

Магический @ переводит фреймворк в режим выполнения кода, а фигурные скобки указывают его границы.

@{
  int i = 10;
}

В этом примере в режиме кода создается переменная i, которой присваивается значение 10. Ничего особого, просто что-то нужно было написать для примера.

В режиме кода можно писать практически все, что угодно, никаких ограничений вроде нет. Можно даже полностью отказаться от контроллеров и обращаться к модели прямо из View, потому что никто вас остановить не может, если нет наставника или начальника, который даст по рукам. В представлениях не должно быть никакой логики! Да, это возможно, но это очень плохо. В файлах cshtml может быть CS код, если он необходим для отображения чего-либо на странице.

У начинающего программиста может возникнуть вопрос - что писать в контроллерах, а что писать в cshtml? Трудно дать такое правило, которое работало бы в 100% случаев. Я бы сказал так – если код можно написать где-то в другому месте, в представлении лучше его не писать.

Как только фигурные скобки заканчиваются, после этого мы снова возвращаемся в режим HTML и можем писать текст даже без тэгов:

@{
  int i = 10;
  <p>index = @i</p>
}
Это текст 

В этом примере я еще и HTML код вставил в блок кода и это совершенно легально. Как только фреймворк видит открывающийся HTML тэг, он переходит в режим отображения этого языка разметки. Как только достигается конец тега, то мы возвращаемся в режим кода и можем писать CS код. Написать просто текст среди кода нельзя, но это и не нужно. В тех случаях, когда вам нужно в блоке кода вывести на страницу какой-то текст, можно использовать тэг:

@{
  int i = 10;
   index = @i
}

Это очень удобный трюк и когда фреймворк отображает содержимое тега, то на странице не будут отражаться никакие пробелы до открывающегося тега или после него, так что можете ставить пробелы так, чтобы код выглядел в редакторе красиво.

Есть еще один вариант перевести текущую строку в HTML режим – поставить @: (символ @ и двоеточие)

@{  
  int i = 10;
  @: This is a string @i 
}

В этом примере у нас в блоке кода первая строка это чистый CS код, а вторая строка переведена в режим HTML, поэтому можно писать просто текст, а для вывода значения переменно i мне приходится отображать ее, как это делается в html режиме, то есть ставить перед переменной символ @.

О блоге

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

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

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

Пишите мне