将不同的实体类型发送到同一Blazor组件

时间:2019-04-19 12:49:41

标签: components blazor

我有一个blazor组件,我想传递从后端获取的数据。每组数据都有一个不同的实体名称,因此在到达组件时,我很难将其转换为通用类型。我的错误在哪里?谢谢

在父级的ChildData = @ sysList上获得以下错误:

参数1:无法从Test2.Shared.Models.MeasurementSystem []转换为System.Collections.Generic.IReadOnlyList []

父母

eulerAngles

孩子

<ChildComponent ChildData=@sysList TItem=@Test2.Shared.Models.MeasurementSystem</ChildComponent>
<ChildComponent ChildData=@unitList TItem=@Test2.Shared.Models.MeasurementUnit</ChildComponent>
<ChildComponent ChildData=@groupList TItem=@Test2.Shared.Models.MeasurementGroup</ChildComponent>

@functions {
    private Test2.Shared.Models.MeasurementSystem[] sysList { get; set; }
    private Test2.Shared.Models.MeasurementUnit[] unitList { get; set; }
    private Test2.Shared.Models.MeasurementGroup[] groupList { get; set; }


    protected override async Task OnInitAsync()
    {
        sysList = await Http.GetJsonAsync<Test2.Shared.Models.MeasurementSystem[]>("/api/System/Index");
        unitList = await Http.GetJsonAsync<Test2.Shared.Models.MeasurementUnit[]>("/api/Unit/Index");
        groupList = await Http.GetJsonAsync<Test2.Shared.Models.MeasurementGroup[]>("/api/Group/Index");
    }
}

课程

@typeparam TItem
@foreach (var data in ChildData)
{
    <p @data.Name>            
}

@functions {
    [Parameter] private IReadOnlyList<TItem>[] ChildData { get; set; }  
 }

1 个答案:

答案 0 :(得分:0)

尝试一下:

[Parameter] private IReadOnlyList<TItem> ChildData { get; set; } 

代替此:

[Parameter] private IReadOnlyList<TItem>[] ChildData { get; set; } 

我不确定您要做什么... 为什么不使用模板化组件?

但是,请尝试执行以下操作: 这个:

 private List<Test2.Shared.Models.MeasurementSystem> sysList { get; set; }

代替:

 private Test2.Shared.Models.MeasurementSystem[] sysList { get; set; } 

并且:

 sysList = await Http.GetJsonAsync<List<Test2.Shared.Models.MeasurementSystem>>("/api/System/Index");

代替:

 sysList = await Http.GetJsonAsync<Test2.Shared.Models.MeasurementSystem[]>("/api/System/Index");

对其余类型执行相同操作...如果不起作用,请改用模板化组件。

这是什么:<p @data.Name>