VS2022/.NET6环境下WASM Blazor嵌套组件传参内部对象为空报错
问题原因
- 核心问题1:
tester.razor中未初始化outerClass实例,或是初始化OuterClass时未同步初始化其内部的InnerClass属性,导致传递给子组件的对象为null - 核心问题2:Blazor组件的
[Parameter]参数默认值仅在父组件未显式传递该参数时生效,只要父组件传了参数(哪怕传的是null),都会覆盖子组件内设置的默认值。你在OuterComponent、InnerComponent中给参数设置的默认初始化逻辑完全没有生效,被父组件传递的null值覆盖了。
修复方案
1. 补全tester.razor的初始化逻辑
确保outerClass本身和其内部的InnerClass都完成实例化:
@page "/test" @using VetJobSearch.UI.ViewModels <EditForm Model=@outerClass> <OuterComponent OuterClass="@outerClass"/> </EditForm> @code { private OuterClass outerClass { get; set; } = new OuterClass() { // 必须手动初始化InnerClass,否则默认是null InnerClass = new InnerClass() }; }
2. (可选优化)实体类添加默认初始化
直接在OuterClass定义中给InnerClass设置默认值,避免每次实例化都手动赋值:
public class OuterClass { public string? OuterText { get; set; } public InnerClass? InnerClass { get; set; } = new InnerClass(); }
3. (可选增强鲁棒性)组件添加空值判断
如果存在参数可能为空的场景,可以在组件渲染前加空校验,避免空引用异常:
@* OuterComponent.razor *@ @using ViewModels @if (OuterClass?.InnerClass != null) { <InnerComponent InnerClass=OuterClass.InnerClass/> } @code { [Parameter] public OuterClass OuterClass { get; set; } = new OuterClass() { InnerClass = new InnerClass() }; }
内容的提问来源于stack exchange,提问作者shuri17
相关产品推荐
相关产品推荐

