Blazor(.NET 8 RC2)级联参数问题:子组件currentSeason为何为null
Blazor (.NET 8 RC2)级联参数传递问题求助
我是Blazor(.NET 8 RC2)新手,在尝试从父组件向子组件传递级联参数时,发现TeamStandings组件的CascadingParameter currentSeason为null,特此求助。
相关代码
DataLayout组件
@if (currentSeason!=null && currentSeason.ActiveCategory.IsActive) { <CascadingValue Value="@currentSeason"> @Body </CascadingValue> } @code { [CascadingParameter] RouteData RouteData { get; set; } public string? Slug { get; set; } public CurrentSeasonModel? currentSeason { get; set; } = new(); protected override async Task OnInitializedAsync() { if (RouteData.RouteValues.TryGetValue("Slug", out var slug) == true) { // 更新currentSeason的逻辑 } } }
父页面组件
@page "/abc" @if (currentSeason != null && currentSeason.ActiveCategory.IsActive) { <TTSWeb.Blazor.Client.Pages.League.RecentFixtures /> <TTSWeb.Blazor.Client.Pages.League.TeamStandings /> } @code { [CascadingParameter] public CurrentSeasonModel? currentSeason { get; set; } }
TeamStandings组件代码截图

问题分析与解决建议
调整DataLayout渲染逻辑
当前只有currentSeason!=null且currentSeason.ActiveCategory.IsActive为true时,才会渲染包裹@Body的CascadingValue。但currentSeason初始是新建的空实例,OnInitializedAsync是异步执行的,初始渲染时大概率不满足判断条件,导致父页面无法接收到级联参数,子组件自然拿不到值。把
CascadingValue移到判断外层,确保级联参数始终能传递:<CascadingValue Value="@currentSeason"> @if (currentSeason!=null && currentSeason.ActiveCategory.IsActive) { @Body } else { <p>加载中...</p> } </CascadingValue>确保异步更新后触发渲染
如果CurrentSeasonModel是普通类(未实现INotifyPropertyChanged),在OnInitializedAsync中更新currentSeason后,需手动调用StateHasChanged()触发组件重新渲染:protected override async Task OnInitializedAsync() { if (RouteData.RouteValues.TryGetValue("Slug", out var slug) == true) { // 更新currentSeason的逻辑 StateHasChanged(); } }检查级联参数类型匹配
确认TeamStandings组件中CascadingParameter的类型(包括命名空间)和传递的CurrentSeasonModel完全一致,避免因类型不匹配导致参数无法接收。
内容的提问来源于stack exchange,提问作者nam vo
相关产品推荐
相关产品推荐

