Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
При использовании элементов кода С# в представлениях мы использовали знак @. Это знак, используемый движком представлений Razor для перехода к коду на языке C#/VB.NET. Чтобы понять суть движка Razor и его синтаксиса, посмотрим сначала, что такое движки представлений.
При вызове метода View контроллер не производит рендеринг представления и не генерирует разметку html. Контроллер только готовит данные и выбирает, какое представление надо возвратить в качестве объекта ViewResult. Затем уже объект ViewResult обращается к движку представления для рендеринга представления в выходной результат.
До MVC 3 использовался только движок Web Forms, который использовал стандартный синтаксис ASP.NET. Например:
<% foreach(BookStore.Models.Book b in ViewBag.Books) { %> <li>Книга: <%: b.Name %></li> <% } %>
Введение в MVC 3 движка Razor позволило уменьшить синтаксис при вызове кода C#, сделать код более "чистым".
Аналогичный пример на Razor выгдядит так:@foreach(BookStore.Models.Book b in ViewBag.Books) {<li>Книга: b.Name </li>}
Поэтому его использование более предпочтительно. В конечном счете, выбор движка представлений зависит от личных предпочтений, и оба движка по функциональности равноценны.
В данном случае важно понимать, что движок представлений, например, Razor - это не какой-то новый язык, это лишь способ рендеринга представлений, который имеет определенный синтаксис для перехода от разметки html к коду C#.
Кроме движка Razor можно использовать и движки сторонних производителей. Например, движок Spark, использующий декларативный синтаксис, или Brail, который использует язык Boo.
Использование синтаксиса Razor характеризуется тем, что перед выражением кода стоит знак @
, после которого осуществляется переход к
коду C#. Существуют два типа переходов: к выражениям кода и к блоку кода.
Например, переход к выражению кода:
<p>@b.Name</p>
Razor автоматически распознает, что Name - это свойство объекта b
.
Также можно использовать стандартные классы и методы, например, выведем текущее время:
<h3>@DateTime.Now.ToShortTimeString()</h3>
Применение блоков кода аналогично, только знак @ ставится перед всем блоком кода, а движок автоматически определяет, где этот блок кода заканчивается:
@foreach (BookStore.Models.Book b in Model) { <p>@b.Name</p> }
Более того мы можем создавать блоки кода в представлении, создавать там переменные так же, как и в файле кода C#:
@{ string head = "Привет мир!!!"; head = head + " Добро пожаловать на сайт!"; } <h3>@head</h3>