Blazor WASM: Необработанный объект исключения типа T имеет свойство, соответствующее имени, но к нему не применяется [атрибут параметра]

#c# #blazor-webassembly

Вопрос:

Я немного в тупике здесь, потому что у меня действительно применен атрибут параметра. Кажется, я просто следую документации один на один.

Сообщение об ошибке

 Unhandled exception rendering component: Object of type 'Onero.Client.Features.CourseManager.CourseModelRegister' has a property matching the name 'HighSchoolRegistrationModelId', but it does not have [ParameterAttribute] applied.
 

Иерархия компонентов

 //parent

<CascadingValue Value="HighSchoolRegistrationModelId">
    <CourseModelAddForm></CourseModelAddForm>
</CascadingValue>

@code {
    public long HighSchoolRegistrationModelId;
    protected override async Task OnInitializedAsync()
    {
        await base.OnInitializedAsync();
        HighSchoolRegistrationModelId = await CourseService.GetHighSchool();
    }
}

//middle component
@if (add)
{
    <CourseModelRegister HighSchoolRegistrationModelId="@HighSchoolRegistrationModelId"> 
    </CourseModelRegister>
}

@code {
    [CascadingParameter] 
    protected long HighSchoolRegistrationModelId { get; set; }
    private bool add = false;
    protected override async Task OnParametersSetAsync()
    {
        await base.OnParametersSetAsync();
    }
    private void ShowAddForm()
    {
        add = true;
    }
}

//Grandchild where error occurs

@code {
    [CascadingParameter] 
    protected long HighSchoolRegistrationModelId { get; set; }
   // rest of code omitted
}
 

Я что-то упускаю? Возможно, это связано с управлением жизненным циклом? Я пробовал использовать как OnInitialized, так и OnParametersSet.

Комментарии:

1. Я знаю, что прошло 2 месяца, у вас был шанс найти ответ на этот вопрос?

2. Нет, я смутно припоминаю, что где-то видел, что произошла ошибка с передачей внукам, которую нужно было исправить. В итоге я просто использовал Parameter , и это сработало достаточно хорошо.

Ответ №1:

Я уверен, что нашел проблему, у меня была точно такая же ситуация, и это потому, что я передавал значение параметру компонента, и он был определен как [каскадный параметр], поэтому это создало конфликт.

Итак, на этой линии:

 <CourseModelRegister HighSchoolRegistrationModelId="@HighSchoolRegistrationModelId"> 
</CourseModelRegister>
 

Вам не нужно передавать значение HighSchoolRegistrationModelId, потому что оно будет заполнено параметром [Каскадный параметр]. В вашем случае вам, возможно, потребуется убедиться, что у вашего среднего компонента также есть [каскадный параметр], чтобы значение передавалось его дочерним элементам.

Комментарии:

1. К сожалению, удаление значения из этого тега все равно привело к той же ошибке.