Сценарии

Редактировал(а) Alexandr Fokin 2026/01/31 15:46

Отправка изменений пользовательского интерфейса с сервера Blazor в браузер при возникновении событий сервера

Pushing UI changes from Blazor Server to browser on server raised events
https://swimburger.net/blog/dotnet/pushing-ui-changes-from-blazor-server-to-browser-on-server-raised-events

mikoskinen/Blazor.EventAggregator
https://github.com/mikoskinen/Blazor.EventAggregator
Дополнение: После просмотра исходников считаю, что
лучше реализовать свое решение на основе событий жизненного цикла OnInitialized(Async) для подписки и Dispose(Async) для отписка от события

Проблема внедрения зависимостей через конструктор

Can we talk about constructor injection now that partial classes are here? #18088
https://github.com/dotnet/aspnetcore/issues/18088

Возможное решение - собственная реализация IComponentActivator 

Blazor: Implement IComponentActivator to get components from DI
https://github.com/abpframework/abp/issues/5527

abp/framework ServiceProviderComponentActivator 

Открыть новую вкладкуHow can I open a new window
https://stackoverflow.com/questions/62769031/how-can-i-open-a-new-window-without-using-js
Работа с файлами

Загрузка файлов:

Отправка файлов в ASP.NET Core Blazor
https://docs.microsoft.com/ru-ru/aspnet/core/blazor/file-uploads?view=aspnetcore-5.0&pivots=webassembly

Для Net.Core 3.1
SteveSandersonMS/BlazorInputFile (Archived)
https://github.com/SteveSandersonMS/BlazorInputFile


Скачивание файла:

Для скачивания файла можно сделать endpoint - api controller и кнопку, которая перенаправляет на него.
Можно использовать NavigationManager.

Динамические отрисовка компонентов
(динамическое выбор типа компонента)

How to Dynamically Render a Component in a Blazor Application
https://www.syncfusion.com/blogs/post/how-to-dynamically-render-a-component-in-a-blazor-application.aspx

Blazor - Как динамически создавать компоненты
https://question-it.com/questions/789772/blazor-kak-dinamicheski-sozdavat-komponenty

Виртуализация списков
(частичный рендер списка)
Виртуализация компонентов ASP.NET Core Blazor
https://docs.microsoft.com/ru-ru/aspnet/core/blazor/components/virtualization?view=aspnetcore-5.0
Рендер Raw HTML

Есть ли в Blazor эквивалент Html.Raw?
https://reddeveloper.ru/questions/yest-li-v-blazor-ekvivalent-html-raw-jNW4j

@((MarkupString)"<div>Raw html</div>")
Тип RenderFragment
Позволяет передавать блок кода разметки Blazor в качестве параметра или возвращать как результат функции.
https://learn.microsoft.com/ru-ru/dotnet/api/microsoft.aspnetcore.components.renderfragment
Функция с разметкой.RenderFragment MyFunction() => @(<p>hello</>)
Вызов OneOf.<div>
@(
    OneOfHelper.OneOf<Microsoft.AspNetCore.Components.RenderFragment>(
        value,
        type1Handler: (typedValue) => @<p>@typedValue.Prop1</p>,
        type2Handler: (typedValue) => @<p>@typedValue.Prop2</p>,)
    )
);
</div>
Можно использовать при наследовании компонентов, для это зарезервировано имя параметра ChildContent.<div>
  @ChildContent
</div>
Передача разметки в качестве параметра / содержимого. (Например можно использовать для создания компонентов оберток).<WrapperComponent>
  <ContentParameter1>content1</ContentParameter1>
  <ContentParameter2>content2</ContentParameter2>
</WrapperComponent>
Атрибуты html тега.

Использование переменной для значения атрибута.

Особенность: Blazor не будет рендерить атрибут, если значение атрибута false или null. (Например это можно использовать для атрибута disabled).

Blazor InputText: conditionally rendering an attribute
https://stackoverflow.com/questions/58020174/blazor-inputtext-conditionally-rendering-an-attribute

<div autofocus="@(MyModel.isAutoFocus)"></div>
<div autofocus="@(MyModel.GetIsAutoFocus())"></div>
Динамическое формирование атрибутов.<div @attributes="HandyFunction()"></div>

@code{
    Dictionary<string,object> HandyFunction()
    {
        var dict = new Dictionary<string, object>();
        if(MyModel.isAutoFocus) dict.Add("autofocus",true);
        return dict;
    }
}
Ссылка на компонент
Взаимодействие с JavaScript