Недавно я начал использовать Blazor и считаю его очень многообещающей технологией.
Я собираюсь создать собственные вложенные компоненты Blazor, но, похоже, не могу заставить его работать так, как я хочу.
Цель состоит в том, чтобы иметь компонент Content, у которого есть ContentHeader и свойство ContentBody. Однако ContentHeader должен быть другим настраиваемым компонентом со свойствами Title и ActionBar. Желаемое использование выглядит следующим образом:
<Content>
<ContentHeader>
<Title>
Title
</Title>
<ActionBar>
<button>Test button</button>
</ActionBar>
</ContentHeader>
<ContentBody>
Body
</ContentBody>
</Content>
Компонент контента:
<CascadingValue Value="this">
<div class="content-container">
@ContentHeader(Header)
<div class="content-body">
@ContentBody
</div>
</div>
</CascadingValue>
@code {
[Parameter]
public RenderFragment<ContentHeader> ContentHeader { get; set; }
[Parameter]
public RenderFragment ContentBody { get; set; }
public ContentHeader Header { get; set; }
public async Task SetContentHeader(ContentHeader contentHeader)
{
Header = contentHeader;
await InvokeAsync(StateHasChanged);
}
}
Компонент ContentHeader:
<div class="content-header">
<h3>@Title</h3>
<div class="content-header-action-bar">
@ActionBar
</div>
</div>
@code {
[CascadingParameter]
public Content Content { get; set; }
[Parameter]
public RenderFragment Title { get; set; }
[Parameter]
public RenderFragment ActionBar { get; set; }
protected override async Task OnInitializedAsync()
{
await Content.SetContentHeader(this);
await base.OnInitializedAsync();
}
}
Фактический результат рендеринга, который я получаю, таков:
<div class="content-container">
<!--!-->
Title
<!--!-->
<!--!-->
<button>Test button</button>
<!--!-->
<div class="content-body">
<!--!-->
Body
</div>
</div>
Похоже, компонент ContentHeader его разметка полностью игнорирует. Теги <h3></h3>
вокруг заголовка компонента заголовка отсутствуют, и кнопка не помещена внутри <div class="content-header-action-bar"></div>
Я также заметил, что OnInitializedAsync
ContentHeader не запускается.
Что я делаю неправильно? Я вообще использую правильный подход?
Спасибо заранее.
С уважением