Blazor Wasm嵌套组件传递对象报空引用异常问题求助(.NET 6/VS2022)
问题原因
核心坑点:Blazor 组件参数的默认值仅在父组件未传递该参数时生效
你遇到的空引用是两个层级的初始化缺失共同导致的:
tester.razor中没有对outerClass做初始化,你直接向OuterComponent传递了null作为OuterClass参数值。此时你在OuterComponent里给OuterClass参数写的默认初始化代码不会生效,Blazor 会直接把父组件传的null赋值给该属性,后续访问OuterClass.InnerClass直接触发空引用。- 即便你初始化了
outerClass,如果没有手动给它的InnerClass属性赋值,你向InnerComponent传递的InnerClass参数也是null,同样会覆盖InnerComponent里写的参数默认值,访问InnerClass.InnerText时触发空引用。
修复方案
第一步:补全 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 = new InnerClass() }; }
第二步(可选):增加组件空校验避免同类问题
如果组件允许参数为空,可以在渲染前加空判断,避免异常:
@* OuterComponent.razor 增加空判断 *@ @using ViewModels @if (OuterClass?.InnerClass != null) { <InnerComponent InnerClass=OuterClass.InnerClass/> } @code { [Parameter] public OuterClass OuterClass { get; set; } = new OuterClass() { InnerClass = new InnerClass() }; }
如果要求参数必须传非空值,可以给参数加 [EditorRequired] 特性,编译阶段就会对未传参/传null的情况抛出警告,提前发现问题。
内容的提问来源于stack exchange,提问作者shuri17
相关产品推荐
相关产品推荐

