Движок представлений и Razor

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

При использовании элементов кода С# в представлениях мы использовали знак @. Это знак, используемый движком представлений 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

Использование синтаксиса 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>
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850