Содержание
Для дальнейшей работы с Blazor нам необходимо немного подробнее ознакомиться с тем, что из себя представляет язык разметки Razor, который мы уже неоднократно видели и использовали при создании своего компонента Blazor.
Razor — это легкий язык разметки, основанный на HTML и C#. С помощью Razor мы можем легко переходить от HTML-разметки к коду на C# для того, чтобы определить логику рендеринга компонентов Blazor. Когда файл .razor компилируется, то вся логика рендеринга собирается в класс .NET, а имя скомпилированного класса берется из имени файла .razor (поэтому и название этого файла должно начинаться с заглавной буквы).
Пространства имен для скомпилированных классов .NET
Пространство имен для класса берется из пространства имен по умолчанию для проекта и пути к папке, или вы можете явно указать пространство имен с помощью директивы @namespace. Например, если файл компонента MyComponent.razor располагается в папке Components, а приложение называется BlazorApp, то пространство имен для компонента по умолчанию будет BlazorApp.Components.
Как работает разметка Razor
Логика рендеринга компонента создается с использованием обычной HTML-разметки с добавлением динамической логики с использованием C#.
Символ @ используется для перехода на C# и, как правило, Razor прекрасно разбирается в том, когда вы переключились на HTML, а когда переходите на C#. Например, следующий компонент отображает HTML-тег <p>тег с текущим временем:
<p>@DateTime.Now</p>
Если необходимо явно указать начало и конец выражения C#, то необходимо использовать круглые скобки:
<p>@(DateTime.Now)</p>
Условный оператор if
Если вам необходимо в HTML-разметке определить какую-то простую логику с использованием C#, то можно использовать следующую конструкцию условного оператора if:
@if (value == 0)
{
<p>Значение переменной равно нулю</p>
}
Razor «понимает», когда мы переключаемся снова на HTML-код, поэтому на экран будет выведена строка «Значение переменной равно нулю».
Цикл foreach
Если в HTML-разметке нам необходимо сформировать список или вывести таблицу каких-либо значений, то можно воспользоваться циклом foreach следующим образом:
<ul>
@foreach (var item in items)
{
<li>@item.Text</li>
}
</ul>
Аналогичным образом вы можете использовать и другие циклы, например, for, while и т.д.
Директивы Razor
Директивы Razor используются для управления различными аспектами рендеринга компонентов. Все директивы Razor начинаются с символа @. Например, с помощью директивы @namespace мы можем подключить пространство имен в проект:
@namespace BlazorApp.MyComponents
Наиболее часто используемые директивы Razor представлены в таблице ниже
| Директива | Описание | Пример |
@code |
Добавляет члены класса в компонент (поля, методы и т.д.) |
@code
{
int i = 0;
public void Inc()
{
i++;
}
}
|
@layout |
Указывает компонент компоновки для компонента | @layout MainLayout |
@page |
Определяет маршрут для компонента | @page "/calendar" |
@using |
Указывает пространство имен для включения в область видимости | @using MyComponentNamespace |
@inject |
Внедрение службы в компонент | @inject IJSRuntime JS |
Атрибуты директив Razor
Razor также широко использует атрибуты директив для элементов. Атрибуты директив используются для управления различными аспектами компиляции компонентов (обработка событий, привязка данных, ссылки на компоненты и элементы и так далее). Синтаксис атрибутов следующий:
@directive(-suffix(:name))(="value")
где значения в скобках являются необязательными. Так, например, при разработке своего первого компонента Blazor мы использовали атрибут @bind:
<input type="date" @bind="data">
Наиболее широко используемые атрибуты директив Razor представлены в таблице ниже:
| Атрибут | Описание | Пример |
@attributes |
Определяет словарь атрибутов для HTML-элемента | <input @attributes="ExtraAttributes" /> |
@bind |
Создает двустороннюю привязку данных | <input type="date" @bind="data"> |
@on{event} |
Добавляет обработчик события для указанного события | <button @onclick="IncrementCount">Click me!</button> |
С этими и другими атрибутами в Razor мы познакомимся более подробно в следующих частях.
Итого
Razor — это достаточно простой и понятный язык разметки, с помощью которого мы можем совмещать в одном файле и HTML и код C#. Вся логика компонентов Blazor компилируется в классы .NET и, для того, чтобы определить члены классов (поля, методы, свойства и т.д.) используется блок @code{}. Используя синтаксис Razor, мы можем переключаться с HTML-разметки на код C#, устанавливать атрибуты и обработчики событий для визуальных элементов.