Как использовать веб-API OnInitialized в дочернем компоненте Blazor? - PullRequest
0 голосов
/ 25 мая 2020

Я новичок в C# и Blazor WASM в целом, и довольно долго боролся с этим.

У меня есть родительский компонент «Parent.razor» и дочерний компонент «Child.razor»

У родителей, помимо всего прочего, HTML, у меня также есть дочерний тег. Таким образом, это выглядит примерно так (например)

Parent.razor
@page "/machines"

<h1>Machine Information<h1>
<child></child>

@code
{
}

Теперь в дочернем компоненте есть foreach l oop, который выполняет итерацию каждого элемента в списке (типы машин), если типы машин взяты из указанного состояния c list, все работает хорошо. Снимок экрана для справки, я могу получить раскрывающийся список, который мне нужен

Код ниже.

Child.razor
@using Namespace.Shared.Models
@using Blazorise
@inject HttpClient Http


<select>
    @foreach (var machinetype in machinetypes)
    {
        <option value="@machinetype.MachineTypeId">@machinetype.MachineTypeName</option>
    }
</select>

@code {
    public int amachinetypeid { get; set; }

    //This works
    MachineType[] machinetypes = new MachineType[]
    {
        new MachineType{MachineTypeName="TypeX"},
        new MachineType{MachineTypeName="TypeY"}
    };
}

Но когда я пытаюсь использовать веб-API (который также возвращает list), это не работает. Страница загружается бесконечно, и я столкнусь с ошибкой. Код ниже.

Child.razor
@using Namespace.Shared.Models
@using Blazorise
@inject HttpClient Http


<select>
    @foreach (var machinetype in machinetypes)
    {
        <option value="@machinetype.MachineTypeId">@machinetype.MachineTypeName</option>
    }
</select>

@code {
public int amachinetypeid { get; set; }
public MachineType[] machinetypes;

//This works
//MachineType[] machinetypes = new MachineType[]
//{
//   new MachineType{MachineTypeName="TypeX"},
//    new MachineType{MachineTypeName="TypeY"}
//};

//This does not work    
protected override async Task OnInitializedAsync()
{
    machinetypes = await Http.GetJsonAsync<MachineType[]>("api/machinetype/");
}

}

Быстрая проверка моего веб-API, доступ к нему напрямую возвращает мне это. Так что все работает нормально. Щелкните здесь, чтобы увидеть снимок экрана с результатами веб-API

Может ли кто-нибудь посоветовать, что я сделал не так? И нужно ли для этого создать инъекцию зависимости? Если да, может ли кто-нибудь указать мне правильное направление?

Заранее спасибо.

1 Ответ

1 голос
/ 25 мая 2020

Вероятно, у вас ошибка нулевой ссылки. Это может выглядеть как «загружается бесконечно».

Вам нужно

public MachineType[] machinetypes = new MachineType[0];
...