Blazor组件参数传递异常:传入对象在子组件构造函数中为null
问题原因及解决方法
核心问题是:Blazor组件的[Parameter]属性是在构造函数执行之后才会被框架赋值的,所以你在构造函数里访问Jewellery参数时,它还没被设置,自然是null。
解决方法
你有两种常见的修正方式:
方式一:使用组件生命周期方法初始化
把依赖参数的逻辑移到OnInitialized或OnParametersSet生命周期方法中,这两个方法会在参数赋值完成后执行:
[Parameter] public Jewellery? Jewellery { get; set; } private string title = ""; protected override void OnInitialized() { title = Jewellery?.Name ?? "Empty"; }
如果参数可能在组件生命周期中被父组件更新,建议用OnParametersSet,它会在每次参数变化时重新执行。
方式二:直接在组件视图中绑定表达式
不需要额外定义title字段,直接在Card组件的razor模板中使用表达式渲染:
<!-- Card.razor --> <h3>@(Jewellery?.Name ?? "Empty")</h3>
这种方式更简洁,也能自动响应参数的变化。
补充说明
Blazor组件的实例创建流程是:
- 调用构造函数创建组件实例
- 框架赋值所有
[Parameter]标记的属性 - 执行
OnInitialized等生命周期方法 - 渲染组件视图
所以构造函数阶段根本拿不到参数值,这是你遗漏的关键逻辑。
内容的提问来源于stack exchange,提问作者bilpor
相关产品推荐
相关产品推荐

