Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Примечание.
Это не последняя версия этой статьи. Текущий выпуск можно найти в версии этой статьи о .NET 10.
Предупреждение
Эта версия ASP.NET Core больше не поддерживается. Для получения дополнительной информации см. Политику поддержки .NET и .NET Core. Текущий выпуск можно найти в версии этой статьи о .NET 10.
Статьи по основам включают описание основных понятий Blazor. Некоторые понятия связаны с компонентами Razor, которые описаны в следующем разделе этой статьи и подробно рассматриваются в статьях Компоненты.
Основные понятия статической и интерактивной отрисовки
Razorкомпоненты либо статически отрисовываются, либо отображаются в интерактивном режиме.
Static или статическая отрисовка — это сценарий на стороне сервера, который означает, что компонент отображается без возможности взаимодействия между пользователем и кодом .NET/C#. События JavaScript и HTML-DOM остаются неизменными, но ни одно пользовательское событие на клиенте не может обрабатываться из-за .NET, запущенного на сервере.
Interactive/interactivity или interactive rendering означает, что компонент имеет емкость для обработки событий .NET и привязки с помощью кода C#. События и привязки .NET обрабатываются либо на сервере с помощью среды выполнения ASP.NET Core, либо в браузере на клиенте с помощью среды выполнения на основе WebAssembly Blazor.
Внимание
При использовании Blazor Web App большинство компонентов Blazor из примеров документации требуют интерактивности для функционирования и демонстрации концепций, изложенных в статьях. При тестировании примера компонента, предоставленного статьей в Blazor Web App, убедитесь, что приложение использует глобальный режим взаимодействия или компонент использует интерактивный режим отрисовки. Дополнительные сведения об этой теме предоставляются в разделе ASP.NET Core Blazor режимов отрисовки в разделе Components далее в наборе документации Blazor.
Дополнительные сведения об этих понятиях и способах управления статической и интерактивной отрисовкой приведены в статье ASP.NET Core Blazor режимы отрисовки далее в документации Blazor.
Основные понятия отрисовки клиента и сервера
Blazor По всей документации, действие, которое происходит в системе пользователя, как сообщается, происходит на стороне клиента или клиента. Действие, которое происходит на сервере, происходит на сервере или на стороне сервера.
Термин «рендеринг» означает создание HTML-разметки, отображаемой браузерами.
Клиентская отрисовка (CSR) означает, что окончательная разметка HTML создается средой выполнения .NET WebAssembly на клиенте. HTML-код для клиентского пользовательского интерфейса приложения не отправляется с сервера на клиент для этого типа отображения. Предполагается взаимодействие пользователей со страницей. Нет такой концепции, как статическое отображение на стороне клиента. Предполагается, что CSR является интерактивным, поэтому "интерактивный рендеринг на стороне клиента" и "интерактивный CSR" не используются в отрасли или в Blazor документации.
Серверная отрисовка (SSR) означает, что окончательная разметка HTML создается средой выполнения ASP.NET Core на сервере. HTML отправляется клиенту через сеть для отображения браузером клиента. Код HTML для созданного сервером пользовательского интерфейса приложения не создается клиентом для этого типа отрисовки. SSR может быть двух разновидностей:
- Статический SSR: сервер создает статический HTML-код, который не обеспечивает пользовательскую интерактивность или поддержание состояния компонента Razor.
- Интерактивный SSR: Blazor события позволяют взаимодействие пользователей, а Razor состояние компонента поддерживается фреймворком Blazor .
Предварительная отрисовка — это процесс первоначальной отрисовки содержимого страницы на сервере без включения обработчиков событий для отрисованных элементов управления. Сервер выводит HTML-интерфейс страницы как можно скорее в ответ на первоначальный запрос, что делает приложение более адаптивным к пользователям. Предварительная подготовка также может улучшить оптимизацию поисковой системы (SEO), отрисовав содержимое для первоначального HTTP-ответа, используемого поисковыми системами для вычисления ранжирования страниц. За предварительной отрисовкой всегда следует окончательная отрисовка на сервере или клиенте.
составные части компонента Razor.
Приложения Blazor основаны на компонентах Razor, которые часто называются просто компонентами. Компонентом называется любой элемент пользовательского интерфейса, например страница, диалоговое окно или форма ввода данных. Компоненты — это .NET классы C#, встроенные в сборки .NET.
Razor обозначает способ, которым компоненты обычно записываются в виде страницы разметки Razor для логики и композиции пользовательского интерфейса на стороне клиента. Синтаксис Razor сочетает разметку HTML с кодом C#, позволяя повысить производительность разработчиков. Файлы Razor используют расширение файла .razor.
Хотя некоторые разработчики и онлайн-ресурсы используют термин "Blazor компоненты", в документации избегают этого термина и повсеместно используют "компоненты Blazor" или просто "компоненты".
В документации Blazor используются определенные соглашения для обозначения и обсуждения компонентов:
- Как правило, примеры соответствуют соглашениям по программированию ASP.NET Core/C#и рекомендациям по проектированию. Дополнительные сведения см. в следующих ресурсах:
- рекомендации по проектированию платформы ASP.NET Core (репозиторий
dotnet/aspnetcoreGitHub) - Соглашения о написании кода C# (руководство по C#)
- рекомендации по проектированию платформы ASP.NET Core (репозиторий
- Код проекта, пути к файлам и имена файлов, имена шаблонов проекта и другие специализированные термины находятся на американском английском и обычно заключены в кодовые блоки.
- Компоненты обычно указываются с помощью имени их класса C# (в стиле Pascal), перед которым приведено слово "компонент". Например, типичный компонент отправки файлов называется "компонентом
FileUpload". - Обычно имя класса C# компонента не отличается от его имени файла.
- Маршрутизируемые компоненты обычно задают для своих относительных URL-адресов имя класса компонента в формате kebab-case. Например, компонент
FileUploadвключает конфигурацию маршрутизации для доступа к отрисовываемому компоненту по относительному URL-адресу/file-upload. Маршрутизация и навигация рассматриваются в ASP.NET Core Blazor маршрутизации. - При использовании нескольких версий компонентов они нумеруются по порядку. Например,
FileUpload3компонент достигается по адресу/file-upload-3. - директивы Razor в верхней части определения компонента (
.razor file) помещаются в следующий порядок:@page,@rendermode(.NET 8 или более поздней версии),@usingинструкции, другие директивы в алфавитном порядке. - Хотя для членов
privateэто не требуется, модификаторы доступа применяются в примерах статей и приложений. Например,privateуказывается для объявления поля с именемmaxAllowedFilesкакprivate int maxAllowedFiles = 3;. -
Значения параметров компонента приводят к зарезервированным Razor символам
@, но это не обязательно. Литералы (например, логические значения), ключевые слова (например,this) иnullкак значения параметров компонента не имеют префикса@, но это также лишь соглашение в документации. Собственный код может префиксировать литералы@, если вы хотите. - Классы C# используют ключевое слово
thisи избегают префиксирования полей с подчеркиванием (_), которые инициализируются в конструкторах, что отличается от рекомендаций по проектированию на платформе ASP.NET Core. - В примерах, использующих первичные конструкторы (C# 12 или более поздней версии), параметры первичного конструктора обычно используются непосредственно членами класса. В примерах статей строки кода разделены для уменьшения горизонтальной прокрутки. Эти разрывы не влияют на выполнение, но вы можете удалить их при вставке в проект.
Дополнительные сведения о синтаксисе компонента Razor приведены в разделе Razor синтаксис компонента ASP.NET Core Razor.
Ниже приведен пример компонента счетчика и часть приложения, созданного из шаблона проекта Blazor. Подробно компоненты рассматриваются в статьях Компоненты, которые приведены далее в этой документации. В следующем примере демонстрируются понятия компонентов, описанные в статьях Основы (прежде чем вы приступите к статьям Компоненты, приведенным далее в этой документации).
Counter.razor:
Компонент предполагает, что интерактивный режим отрисовки наследуется от родительского компонента или применяется глобально к приложению.
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount() => currentCount++;
}
Компонент предполагает, что интерактивный режим отрисовки наследуется от родительского компонента или применяется глобально к приложению.
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount() => currentCount++;
}
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
@page "/counter"
<PageTitle>Counter</PageTitle>
<h1>Counter</h1>
<p role="status">Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
@page "/counter"
<h1>Counter</h1>
<p>Current count: @currentCount</p>
<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>
@code {
private int currentCount = 0;
private void IncrementCount()
{
currentCount++;
}
}
Предыдущий компонент Counter:
- Задает собственный маршрут с помощью директивы
@pageв первой строке. - Задает название страницы и заголовок.
- Показывает текущее значение счетчика с помощью
@currentCount.currentCount— это целочисленная переменная, определенная в коде C# блока@code. - Отображает кнопку для запуска метода
IncrementCount, который также можно найти в блоке@codeи который увеличивает значение переменнойcurrentCount.
Режимы отрисовки
Статьи в узле "Основы" ссылаются на понятие режимов отрисовки. Эта тема подробно рассматривается в статье «ASP.NET Core: режимы отрисовки», которая находится в узле «Components», который следует после узла «Fundamentals».
Для ранних упоминаний в этой группе статей о концепциях режима отображения просто отметьте следующее:
Каждый компонент в
Blazor Server и приложения Blazor WebAssembly для выпусков ASP.NET Core до .NET 8 остаются сосредоточены на концепциях hosting model, а не на режимах отрисовки. Режимы отрисовки концептуально применяются к Blazor Web App в .NET 8 или более поздних версий.
В следующей таблице показаны доступные режимы отрисовки компонентов Razor в Blazor Web App. Режимы отрисовки применяются к компонентам с директивой @rendermode для экземпляра компонента или определения компонента. Кроме того, можно задать режим отрисовки для всего приложения.
| Имя | Описание | Место визуализации | Интерактивный |
|---|---|---|---|
| Статический сервер | Статический рендеринг на стороне сервера (статический SSR) | Сервер | Нет |
| Интерактивный сервер | Интерактивная отрисовка на стороне сервера (интерактивный SSR) с помощью Blazor Server | Сервер | Да |
| Интерактивное WebAssembly | Рендеринг на стороне клиента (CSR) с помощью Blazor WebAssembly† | Клиент | Да |
| Интерактивное авто | Интерактивная служба SSR, используемая Blazor Server изначально, а затем CSR при последующих посещениях после Blazor скачивания пакета | Сервер, а затем клиент | Да |
Предполагается, что клиентская визуализация (CSR) является интерактивной. "Интерактивный рендеринг на стороне клиента" и "интерактивный CSR" не используются в отрасли или в Blazor документации.
Предыдущая информация о режимах отрисовки — это все, что необходимо знать для понимания основных статей узлов Фундаментальных знаний. Если вы новичок в Blazor и читаете статьи Blazor в порядке, указанном в оглавлении, вы можете отложить изучение подробной информации о режимах отрисовки, пока не дойдете до статьи ASP.NET Core Blazor режимы отрисовки в узле Components.
Модель объекта документа (DOM)
Ссылки на объектную модель документа используют сокращенную модель DOM.
Дополнительные сведения см. на следующих ресурсах:
Подмножество API .NET для приложений Blazor WebAssembly
Список курируемых API-интерфейсов .NET, поддерживаемых в браузере для Blazor WebAssembly, недоступен. Однако вы можете вручную поискать список API .NET, отмеченных [UnsupportedOSPlatform("browser")], чтобы найти API .NET, которые не поддерживаются в WebAssembly.
Примечание.
Ссылки на справочную документацию .NET обычно ведут на ветвь репозитория по умолчанию, которая представляет собой текущую разработку следующего релиза .NET. Чтобы выбрать тег для конкретного выпуска, используйте раскрывающееся меню Switch branches or tags (Переключение ветвей или тегов). Дополнительные сведения см. в разделе Как выбрать тег версии исходного кода ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Дополнительные сведения см. на следующих ресурсах:
- Библиотеки классов: анализатор совместимости браузеров на стороне клиента
- API пометка как неподдерживаемые на определенных платформах (репозиторий GitHub
dotnet/designs
Примеры приложений
Примеры приложений из документации можно просмотреть и скачать:
Blazor примеры GitHub репозитория (dotnet/blazor-samples)
Найдите пример приложения, сначала выбрав папку версии, соответствующую версии .NET, с которыми вы работаете.
Примеры приложений содержат только подмножество примеров статей для Blazor демонстраций функций. Если пример кода, показанный в статье, отсутствует в одном или нескольких примерах приложений, обычно можно поместить пример кода в локальное тестовое приложение для демонстрации.
Примеры приложений в репозитории:
- Blazor Web App
- Blazor WebAssembly
- Пример руководства Blazor Web App по фильмам (Создание приложения для базы данных фильмов Blazor (Обзор))
- Blazor Web App с SignalR (Используйте ASP.NET Core SignalR с Blazor)
- Два Blazor Web App и приложение Blazor WebAssembly для вызова веб-API (Вызов веб-API из ASP.NET Core приложения Blazor)
- Blazor Web App с OIDC (Защита ASP.NET Core Blazor Web App с помощью OpenID Connect (OIDC))
- Blazor Web App с Entra (Защитите ASP.NET Core Blazor Web App с помощью Microsoft Entra ID)
- Blazor WebAssembly ведения журнала с поддержкой областей (ASP.NET Core Blazor ведение журнала)
- Blazor WebAssembly с ASP.NET Core Identity (Secure ASP.NET Core Blazor WebAssembly с ASP.NET Core Identity)
- .NET MAUI Blazor Hybrid приложение с Blazor Web App и общим пользовательским интерфейсом, предоставляемым библиотекой классов Razor (RCL) (Build a .NET MAUIBlazor Hybrid с приложением Blazor Web App)
- Дополнительные примеры (см. файл README репозитория GitHub с примерами)
Примеры приложений в репозитории:
- Blazor Web App
- Blazor WebAssembly
- Пример руководства Blazor Web App по фильмам (Создание приложения для базы данных фильмов Blazor (Обзор))
- Blazor Web App с SignalR (Используйте ASP.NET Core SignalR с Blazor)
- Два Blazor Web App и приложение Blazor WebAssembly для вызова веб-API (Вызов веб-API из приложения ASP.NET Core Blazor приложения)
- Blazor Web App с OIDC (шаблоны BFF и не BFF) (Защитите ASP.NET Core Blazor Web App с OpenID Connect (OIDC))
- Blazor WebAssembly логирование с поддержкой областей (ASP.NET Core Blazor логирование)
- Blazor WebAssembly с ASP.NET Core Identity (Безопасность ASP.NET Core Blazor WebAssembly с ASP.NET Core Identity)
- .NET MAUI Blazor Hybrid приложение с Blazor Web App и общим пользовательским интерфейсом, который предоставляется библиотекой классов Razor (RCL) (Создайте .NET MAUIBlazor Hybrid приложение с помощью Blazor Web App)
- Дополнительные примеры (см. файл README репозитория GitHub с примерами)
Репозиторий примеров содержит два типа примеров:
- Примерные приложения предоставляют примеры кода, что отображаются в статьях. Эти приложения компилируются, но их не обязательно можно запускать. Эти приложения полезны для простого получения примера кода, отображаемого в статьях.
- Примеры приложений, сопровождающие статьи Blazor, компилируются и запускаются для следующих сценариев:
- Blazor Server и Blazor WebAssembly с SignalR;
- ведение журнала с поддержкой областей Blazor WebAssembly.
Чтобы получить дополнительную информацию, список образцов в репозитории и инструкции по скачиванию, см. файл README в репозитории образцов на GitHub.
Базовое тестовое приложение репозитория ASP.NET Core также является полезным набором примеров для различных сценариев Blazor:
BasicTestApp в справочном источнике ASP.NET Core (dotnet/aspnetcore)
Примечание.
Ссылки на справочную документацию .NET обычно ведут на ветвь репозитория по умолчанию, которая представляет собой текущую разработку следующего релиза .NET. Чтобы выбрать тег для конкретного выпуска, используйте раскрывающееся меню Switch branches or tags (Переключение ветвей или тегов). Дополнительные сведения см. в разделе Как выбрать тег версии исходного кода ASP.NET Core (dotnet/AspNetCore.Docs #26205).
Кратные байтам
.NET байты используют метрические префиксы для недесятичных кратных байтов на основе степеней 1024.
| Имя (сокращенное) | Размер | Пример |
|---|---|---|
| Килобайт (КБ) | 1024 байт | 1 КБ = 1 024 байта |
| Мегабайт (МБ) | 10242 байта | 1 МБ = 1 048 576 байт |
| Gigabyte (ГБ) | 1 0243 байта | 1 ГБ = 1 073 741 824 байта |
Запросы в службу поддержки
В репозитории dotnet/AspNetCore.Docs уместны только вопросы, связанные с документацией.
Если вам требуется поддержка по продукту, не открывайте проблему по документации. Помощь можно найти в одном или нескольких из следующих каналов поддержки:
Для отчета о потенциальной ошибке в платформе или отзыва о продукте создайте запрос для компонента ASP.NET Core в dotnet/aspnetcore разделе с проблемами. Для отчетов об ошибках обычно требуется следующее:
- Четкое объяснение проблемы: Следуйте инструкциям в шаблоне задачи GitHub, предоставленном подразделением продукта при ее открытии.
- проект Minimal repro: Поместите проект на GitHub, чтобы инженеры продуктовой единицы могли его скачать и запустить. Вставьте перекрёстную ссылку на проект в первый комментарий к задаче.
Если потенциальная проблема возникла со статьей по Blazor, создайте заявку о проблеме с документацией. Чтобы открыть проблему с документацией, используйте ссылку на отзыв о проблеме с документацией в нижней части статьи. Добавленные метаданные в вашу задачу предоставляют данные отслеживания и автоматически уведомляют автора статьи. Если тема была обсуждена с продуктовым подразделением перед открытием вопроса документации, разместите гиперссылку на инженерный вопрос в первом комментарии вопроса документации.
Для сообщений о проблемах или предложениях по улучшению Visual Studio используйте опции Report a Problem или Suggest a Feature внутри Visual Studio, которые открывают внутренние задачи для Visual Studio. Дополнительную информацию см. в разделе Visual Studio Feedback.
Для проблем с Visual Studio Code обратитесь за поддержкой на форумах поддержки сообщества. Для отчетов об ошибках и отзывов о продуктах откройте проблему в репозитории microsoft/vscode GitHub.
Проблемы GitHub с документацией
Ссылки сообщества на ресурсы Blazor
Коллекцию ссылок на ресурсы Blazor от сообщества см. на странице Awesome Blazor.
Примечание.
Майкрософт не владеет, не обслуживает и не поддерживает Awesome Blazor и большинство продуктов и услуг сообщества, описанных и упомянутых там.
ASP.NET Core