Как визуализировать компонент Blazor с помощью параметра RenderFragment со страницы Razor ⇐ C#
-
Anonymous
Как визуализировать компонент Blazor с помощью параметра RenderFragment со страницы Razor
У меня есть следующий компонент Blazor:
# Button.razor @ChildContent @код { [Параметр] общественный RenderFragment ChildContent {get; набор; } } Я хочу использовать его на странице Razor. Я знаю, что могу использовать: @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) для этого. Но как передать этому компоненту параметр RenderFragment? RenderComponentAsunc имеет второй аргумент, через который я могу передать параметры для компонента, поэтому я думаю что-то вроде этого должно быть возможно:
# Page.cshtml @(ожидайте Html.RenderComponentAsync(RenderMode.ServerPrerendered, новый { ChildContent = "Текст кнопки" })) Однако это заканчивается ошибкой:
InvalidCastException: невозможно привести объект типа «System.String» к типу «Microsoft.AspNetCore.Components.RenderFragment». Поэтому я попытался передать RenderFragment напрямую. Я создал метод расширения, который создает RenderFragment из строки:
публичный статический класс StringExtensions { общедоступный статический RenderFragment ToRenderFragment (эта строка s) => b => b.AddContent(0, s); } А затем визуализируйте это следующим образом:
@(await Html.RenderComponentAsync(RenderMode.ServerPrerendered, new { ChildContent = "Текст кнопки".ToRenderFragment() })) Мне этот подход тоже не удался.
NotSupportedException: сериализация и десериализация экземпляров Microsoft.AspNetCore.Components.RenderFragment не поддерживаются.NotSupportedException: сериализация и десериализация экземпляров Microsoft.AspNetCore.Components.RenderFragment не поддерживаются.NotSupportedException: сериализация и десериализация экземпляров Microsoft.AspNetCore.Components.RenderFragment не поддерживается. Компонент также можно отобразить с помощью тега . Итак, я попробовал.
Текст кнопки Но это отображает html неправильно
Текст кнопки И я хочу
Текст кнопки Как это сделать? Здесь я использую кнопку в качестве упрощенного примера, поэтому прямое использование разметки в файле .cshtml будет неудобным дублированием кода.
У меня есть следующий компонент Blazor:
# Button.razor @ChildContent @код { [Параметр] общественный RenderFragment ChildContent {get; набор; } } Я хочу использовать его на странице Razor. Я знаю, что могу использовать: @(await Html.RenderComponentAsync(RenderMode.ServerPrerendered)) для этого. Но как передать этому компоненту параметр RenderFragment? RenderComponentAsunc имеет второй аргумент, через который я могу передать параметры для компонента, поэтому я думаю что-то вроде этого должно быть возможно:
# Page.cshtml @(ожидайте Html.RenderComponentAsync(RenderMode.ServerPrerendered, новый { ChildContent = "Текст кнопки" })) Однако это заканчивается ошибкой:
InvalidCastException: невозможно привести объект типа «System.String» к типу «Microsoft.AspNetCore.Components.RenderFragment». Поэтому я попытался передать RenderFragment напрямую. Я создал метод расширения, который создает RenderFragment из строки:
публичный статический класс StringExtensions { общедоступный статический RenderFragment ToRenderFragment (эта строка s) => b => b.AddContent(0, s); } А затем визуализируйте это следующим образом:
@(await Html.RenderComponentAsync(RenderMode.ServerPrerendered, new { ChildContent = "Текст кнопки".ToRenderFragment() })) Мне этот подход тоже не удался.
NotSupportedException: сериализация и десериализация экземпляров Microsoft.AspNetCore.Components.RenderFragment не поддерживаются.NotSupportedException: сериализация и десериализация экземпляров Microsoft.AspNetCore.Components.RenderFragment не поддерживаются.NotSupportedException: сериализация и десериализация экземпляров Microsoft.AspNetCore.Components.RenderFragment не поддерживается. Компонент также можно отобразить с помощью тега . Итак, я попробовал.
Текст кнопки Но это отображает html неправильно
Текст кнопки И я хочу
Текст кнопки Как это сделать? Здесь я использую кнопку в качестве упрощенного примера, поэтому прямое использование разметки в файле .cshtml будет неудобным дублированием кода.
Мобильная версия