Я сейчас немного работаю с Blazor и попал в довольно странную ошибку. Итак, у меня есть родительский компонент, который имеет дочерний компонент, и у него есть сам дочерний компонент, и оба передают Объект дочернему компоненту. Примерно так:
Parent.razor
<ChildComponent @bind-Model="Model" ObjectListConverted="ObjectListConverted"/>
@code {
List<Object> ObjectListConverted = new List<Object>();
}
и
Childcomponent.razor
<MyOwnChild Item="@((Item)obj)"/>
Пока все хорошо. Теперь происходит интересная вещь. Родитель и дочерний компонент инициализируются прямо при загрузке страницы. MyOwnChild-Component может быть загружен только после преобразования некоторых вещей, что происходит в onInitialized () - методе Childcomponent.razor. Я проверил, работает ли преобразование, и фактически инициализируется компонент MyOwnChild (который я проверял с помощью регистрации), но он не виден. Я попытался использовать testComponent, просто содержащий -Tag с некоторым содержанием, но он также не отображается. Также проверил html, который генерируется для hidden-div, либо из-за css, либо из-за неправильно назначенного скрытого атрибута, но ничего подобного не найдено. Это довольно странно. Вероятно, важно знать, что MyOwnChild использует себя рекурсивно, если obj раскрыт, но по умолчанию это false. Кроме того, он связан в большем контексте, поэтому ChildComponent.razor фактически содержит два цикла foreach, один с преобразованным материалом, другой со списком, в который добавляются только элементы при взаимодействии с пользователем:
Childcomponent.razor
@foreach (Object obj in ObjectListConverted)
{
if (obj.IsFolder) //This evaluates to true in all cases right now.
{
<MyOwnChild Item="@((Item)obj)"/>
Console.WriteLine("Hey, it´s a folder!"); //This is logged.
}
}
@if (Model.OtherList != null)
{
@foreach (DetailedObject obj in Model.OtherList)
{
if (obj.IsFolder)
{
<MyOwnChild Item="@((Item)obj)"/>
}
}
}
@code {
[Parameter]
List<Object> ObjectListConverted {get; set;}
[Parameter]
Model Model {get; set;} = new Model();
protected override void OnInitialized() {
ObjectListConverted = ConvertToStructuredList(Model.List);
base.StateHasChanged();
}
}
Таким образом, хотя верхняя версия MyOwnChild.razor вообще не отображается вообще, хотя и инициализирована, нет проблем с ее отображением после добавления нового элемента в otherList. Наследование выглядит следующим образом:
Item:DetailedObject:Object
Но я не думаю, что это проблема, потому что расширение DetailObject имеет только дополнительный атрибут содержимого, который здесь вообще не используется.
Спасибо за помощь. :)