You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor Wasm嵌套组件传递对象报空引用异常问题求助(.NET 6/VS2022)

问题原因

核心坑点:Blazor 组件参数的默认值仅在父组件未传递该参数时生效

你遇到的空引用是两个层级的初始化缺失共同导致的:

  1. tester.razor 中没有对 outerClass 做初始化,你直接向 OuterComponent 传递了 null 作为 OuterClass 参数值。此时你在 OuterComponent 里给 OuterClass 参数写的默认初始化代码不会生效,Blazor 会直接把父组件传的 null 赋值给该属性,后续访问 OuterClass.InnerClass 直接触发空引用。
  2. 即便你初始化了 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 17:45:04