Руководство по Blazor

Компоненты библиотеки классов Razor с параметрами, ChildContent фрагменты рендеринга, разворачивание атрибутов и один тест bUnit на компонент.

Что вы построите

Небольшая контактная форма — поле с меткой, кнопка отправки, @bind-Value привязка, реальное поведение клавиатуры и программы чтения с экрана — сначала голая, затем оформленная, примерно за 10 минут.

Прежде чем начать

Вам понадобятся git и .NET SDK 8 или новее. Подойдёт любой проект Blazor — Blazor Web App, Server или WebAssembly.

Шаг 1 — Получите код

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-blazor-headless
dotnet build
dotnet test      # bUnit — 1,400+ cases across the catalog

Компоненты находятся в src/LilyBlazorHeadless/Components/ — Button.razor, TextInput.razor — по одному файлу Razor на каждый. Сошлитесь на проект (или скопируйте файлы) из вашего приложения Blazor и добавьте @using LilyBlazorHeadless.Components в _Imports.razor.

Шаг 2 — Ваш первый компонент

<Button OnClick="Save">Save</Button>

Отображает <button class="button">. Общие соглашения о параметрах: Label ( aria-label для переопределения), CssClass (добавляется к базовому крючку), ChildContentи [Parameter(CaptureUnmatchedValues = true)] разворачивание атрибутов, чтобы любой дополнительный атрибут HTML проходил насквозь.

Шаг 3 — Составьте небольшую форму

<Form OnSubmit="HandleSubmit">
  <Field Label="Full name" Required="true">
    <TextInput Id="name" Label="Full name" @bind-Value="name" Required="true" />
  </Field>
  <Button Type="submit">Save</Button>
</Form>

@code {
  private string name = "";
}

Field принимает видимую Label как собственный параметр, а не как вложенный компонент метки — передайте её один раз, на Fieldи TextInputиз Label обеспечивает доступное имя.

Проверено 2026-08-29: в более раннем черновике отдельный компонент Label был вложен в Field, что отображало две метки (одну пустую), потому что Field уже отображает свою собственную из входа Label параметр — обнаружено при проверке исходного кода компонента; Form у самого нет Label параметра, поэтому использование <Form> из более раннего черновика исправили, опустив его, вместо того чтобы выдумывать несуществующий атрибут. Составной маршрут контактной формы — тот же шаблон, проверенный настоящими тестами e2e и axe.

Проверьте свою работу: запустите приложение, и форма выглядит голой — именно так, как задумано: оформление ещё впереди. Нажмите Tab: фокус проходит через каждый элемент управления, метка озвучивается, а отправка работает. Поведение готово; внешний вид за вами, и это следующий шаг.

Шаг 4 — Оформите её

Оформите крючки классов — .button, .text-input, .label, .field — в app.css, или подключите готовую тему в App.razor / index.html:

<link rel="stylesheet" href="themes/wireframe.css" />

Шаг 5 — Посмотрите, как всё работает

Пример приложения Blazor Web показывает полный каталог в оформленном виде и с демонстрацией, с тестами e2e Playwright:

git clone https://github.com/LilyDesignSystem/lily-design-system
cd lily-design-system/lily-design-system-blazor-web-examples
dotnet run --project src/LilyBlazorWebExamples

Дальнейшие шаги

Есть вопросы по ходу дела? Страница справки полна ответов — а если какой-то шаг можно сделать яснее, сообщите нам и мы с радостью улучшим руководство.