Исходный код вики Сценарии
Редактировал(а) Alexandr Fokin 2026/01/31 15:46
Скрыть последних авторов
| author | version | line-number | content |
|---|---|---|---|
| |
5.12 | 1 | |(% style="width:254px" %)Отправка изменений пользовательского интерфейса с сервера Blazor в браузер при возникновении событий сервера|(% style="width:1239px" %)((( |
| |
2.1 | 2 | Pushing UI changes from Blazor Server to browser on server raised events |
| 3 | [[https:~~/~~/swimburger.net/blog/dotnet/pushing-ui-changes-from-blazor-server-to-browser-on-server-raised-events>>url:https://swimburger.net/blog/dotnet/pushing-ui-changes-from-blazor-server-to-browser-on-server-raised-events]] | ||
| 4 | |||
| 5 | mikoskinen/Blazor.EventAggregator | ||
| 6 | [[https:~~/~~/github.com/mikoskinen/Blazor.EventAggregator>>url:https://github.com/mikoskinen/Blazor.EventAggregator]] | ||
| 7 | Дополнение: После просмотра исходников считаю, что | ||
| |
5.12 | 8 | лучше реализовать свое решение на основе событий жизненного цикла OnInitialized(Async) для подписки и Dispose(Async) для отписка от события |
| 9 | ))) | ||
| 10 | |(% style="width:254px" %)Проблема внедрения зависимостей через конструктор|(% style="width:1239px" %)((( | ||
| |
2.1 | 11 | Can we talk about constructor injection now that partial classes are here? #18088 |
| 12 | [[https:~~/~~/github.com/dotnet/aspnetcore/issues/18088>>url:https://github.com/dotnet/aspnetcore/issues/18088]] | ||
| 13 | |||
| 14 | Возможное решение - собственная реализация IComponentActivator | ||
| 15 | |||
| 16 | Blazor: Implement IComponentActivator to get components from DI | ||
| 17 | [[https:~~/~~/github.com/abpframework/abp/issues/5527>>url:https://github.com/abpframework/abp/issues/5527]] | ||
| 18 | |||
| |
5.12 | 19 | [[abp/framework ServiceProviderComponentActivator >>url:https://github.com/abpframework/abp/blob/48c52625f4c4df007f04d5ac6368b07411aa7521/framework/src/Volo.Abp.AspNetCore.Components/Volo/Abp/AspNetCore/Components/DependencyInjection/ServiceProviderComponentActivator.cs||style="outline-width: 0px !important; user-select: auto !important;"]] |
| 20 | ))) | ||
| 21 | |(% style="width:254px" %)Открыть новую вкладку|(% style="width:1239px" %)How can I open a new window | ||
| |
2.1 | 22 | [[https:~~/~~/stackoverflow.com/questions/62769031/how-can-i-open-a-new-window-without-using-js>>url:https://stackoverflow.com/questions/62769031/how-can-i-open-a-new-window-without-using-js]] |
| |
5.12 | 23 | |(% style="width:254px" %)Работа с файлами|(% style="width:1239px" %)((( |
| |
2.1 | 24 | Загрузка файлов: |
| 25 | |||
| 26 | Отправка файлов в ASP.NET Core Blazor | ||
| 27 | [[https:~~/~~/docs.microsoft.com/ru-ru/aspnet/core/blazor/file-uploads?view=aspnetcore-5.0&pivots=webassembly>>url:https://docs.microsoft.com/ru-ru/aspnet/core/blazor/file-uploads?view=aspnetcore-5.0&pivots=webassembly]] | ||
| 28 | |||
| 29 | Для Net.Core 3.1 | ||
| 30 | SteveSandersonMS/BlazorInputFile (Archived) | ||
| 31 | [[https:~~/~~/github.com/SteveSandersonMS/BlazorInputFile>>url:https://github.com/SteveSandersonMS/BlazorInputFile]] | ||
| 32 | |||
| |
5.12 | 33 | ---- |
| 34 | |||
| |
2.1 | 35 | Скачивание файла: |
| |
5.12 | 36 | |
| |
2.1 | 37 | Для скачивания файла можно сделать endpoint - api controller и кнопку, которая перенаправляет на него. |
| 38 | Можно использовать NavigationManager. | ||
| |
5.12 | 39 | ))) |
| 40 | |(% style="width:254px" %)Динамические отрисовка компонентов | ||
| 41 | (динамическое выбор типа компонента)|(% style="width:1239px" %)((( | ||
| |
3.1 | 42 | How to Dynamically Render a Component in a Blazor Application |
| 43 | https://www.syncfusion.com/blogs/post/how-to-dynamically-render-a-component-in-a-blazor-application.aspx | ||
| 44 | |||
| 45 | Blazor - Как динамически создавать компоненты | ||
| 46 | https://question-it.com/questions/789772/blazor-kak-dinamicheski-sozdavat-komponenty | ||
| |
5.12 | 47 | ))) |
| 48 | |(% style="width:254px" %)Виртуализация списков | ||
| 49 | (частичный рендер списка)|(% style="width:1239px" %)Виртуализация компонентов ASP.NET Core Blazor | ||
| |
4.1 | 50 | https://docs.microsoft.com/ru-ru/aspnet/core/blazor/components/virtualization?view=aspnetcore-5.0 |
| |
5.12 | 51 | |(% style="width:254px" %)Рендер Raw HTML|(% style="width:1239px" %)((( |
| 52 | Есть ли в Blazor эквивалент Html.Raw? | ||
| 53 | [[https:~~/~~/reddeveloper.ru/questions/yest-li-v-blazor-ekvivalent-html-raw-jNW4j>>https://reddeveloper.ru/questions/yest-li-v-blazor-ekvivalent-html-raw-jNW4j]] | ||
| |
5.2 | 54 | |
| 55 | {{code language="c#"}} | ||
| 56 | @((MarkupString)"<div>Raw html</div>") | ||
| 57 | {{/code}} | ||
| |
5.12 | 58 | ))) |
| |
5.16 | 59 | |(% style="width:254px" %)Тип RenderFragment|(% style="width:1239px" %)((( |
| 60 | |(% style="width:867px" %)Позволяет передавать блок кода разметки Blazor в качестве параметра или возвращать как результат функции. | ||
| 61 | [[https:~~/~~/learn.microsoft.com/ru-ru/dotnet/api/microsoft.aspnetcore.components.renderfragment>>https://learn.microsoft.com/ru-ru/dotnet/api/microsoft.aspnetcore.components.renderfragment]]|(% style="width:343px" %)((( | ||
| 62 | |Функция с разметкой.|{{code language="c#"}}RenderFragment MyFunction() => @(<p>hello</>){{/code}} | ||
| 63 | |Вызов OneOf.|{{code language="html"}}<div> | ||
| 64 | @( | ||
| 65 | OneOfHelper.OneOf<Microsoft.AspNetCore.Components.RenderFragment>( | ||
| 66 | value, | ||
| 67 | type1Handler: (typedValue) => @<p>@typedValue.Prop1</p>, | ||
| 68 | type2Handler: (typedValue) => @<p>@typedValue.Prop2</p>,) | ||
| 69 | ) | ||
| 70 | ); | ||
| 71 | </div>{{/code}} | ||
| 72 | ))) | ||
| 73 | |(% style="width:867px" %)Можно использовать при наследовании компонентов, для это зарезервировано имя параметра ChildContent.|(% style="width:343px" %){{code language="html"}}<div> | ||
| 74 | @ChildContent | ||
| 75 | </div>{{/code}} | ||
| |
5.17 | 76 | |(% style="width:867px" %)Передача разметки в качестве параметра / содержимого. (Например можно использовать для создания компонентов оберток).|(% style="width:343px" %){{code language="html"}}<WrapperComponent> |
| |
5.16 | 77 | <ContentParameter1>content1</ContentParameter1> |
| 78 | <ContentParameter2>content2</ContentParameter2> | ||
| 79 | </WrapperComponent>{{/code}} | ||
| 80 | ))) | ||
| |
5.18 | 81 | |(% style="width:254px" %)Атрибуты html тега.|(% style="width:1239px" %)((( |
| |
5.19 | 82 | |(% style="width:549px" %)((( |
| 83 | Использование переменной для значения атрибута. | ||
| |
5.20 | 84 | |
| |
5.19 | 85 | Особенность: Blazor не будет рендерить атрибут, если значение атрибута false или null. (Например это можно использовать для атрибута disabled). |
| 86 | |||
| 87 | Blazor InputText: conditionally rendering an attribute | ||
| 88 | [[https:~~/~~/stackoverflow.com/questions/58020174/blazor-inputtext-conditionally-rendering-an-attribute>>https://stackoverflow.com/questions/58020174/blazor-inputtext-conditionally-rendering-an-attribute]] | ||
| 89 | )))|(% style="width:665px" %){{code language="html"}}<div autofocus="@(MyModel.isAutoFocus)"></div> | ||
| |
5.18 | 90 | <div autofocus="@(MyModel.GetIsAutoFocus())"></div>{{/code}} |
| 91 | |(% style="width:549px" %)Динамическое формирование атрибутов.|(% style="width:665px" %){{code language="html"}}<div @attributes="HandyFunction()"></div> | ||
| 92 | |||
| 93 | @code{ | ||
| 94 | Dictionary<string,object> HandyFunction() | ||
| 95 | { | ||
| 96 | var dict = new Dictionary<string, object>(); | ||
| 97 | if(MyModel.isAutoFocus) dict.Add("autofocus",true); | ||
| 98 | return dict; | ||
| 99 | } | ||
| 100 | }{{/code}} | ||
| 101 | ))) | ||
| |
5.21 | 102 | |(% style="width:254px" %)Ссылка на компонент|(% style="width:1239px" %)((( |
| 103 | |Add @ref to a Blazor component in a loop | ||
| 104 | [[https:~~/~~/stackoverflow.com/questions/60064510/add-ref-to-a-blazor-component-in-a-loop>>https://stackoverflow.com/questions/60064510/add-ref-to-a-blazor-component-in-a-loop]]| | ||
| 105 | | | | ||
| 106 | ))) | ||
| |
5.14 | 107 | |(% style="width:254px" %)[[Взаимодействие с JavaScript>>doc:.Взаимодействие с JavaScript.WebHome]]|(% style="width:1239px" %) |