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

渲染Razor组件时出现NullReferenceException问题求助

问题原因与修复方案

直接问题根源

你的NewsCard组件代码中存在一处未处理的空引用风险:
在渲染发布者信息的这一行:

<p class="news-card-posted-by">@string.Format("{0} {1}", NewsData?.PostedBy.LastName, NewsData.PostedBy.FirstName)</p>

第一个参数NewsData?.PostedBy.LastName使用了空条件运算符?.,但第二个参数NewsData.PostedBy.FirstName没有。这意味着:

  • 只要NewsData不为null,但NewsData.PostedBy为null,访问FirstName就会直接抛出NullReferenceException。

为什么组件内使用正常,页面渲染时出错

  • 在组件中使用<NewsCard NewsData="news"/>时,你传递的news对象的PostedBy属性始终有有效值,因此这个潜在的空引用问题没有被触发。
  • 而使用<component>标签或Html.RenderComponentAsync渲染时,要么你传递的news对象的PostedBy属性实际为null(即使你认为对象“有效”,可能忽略了这个子属性的空值),要么服务器端静态渲染的执行时机更早,直接暴露了这个未处理的边界情况(交互式组件渲染可能有延迟绑定或错误容忍的差异)。

修复方案

方案1:补全空条件运算符

修改发布者信息的渲染代码,为PostedBy的所有访问添加空条件运算符:

<p class="news-card-posted-by">@string.Format("{0} {1}", NewsData?.PostedBy?.LastName, NewsData?.PostedBy?.FirstName)</p>

方案2:优雅处理空值场景

如果PostedBy可能为null,建议添加显式判断,避免显示空字符串或奇怪的格式:

<p class="news-card-posted-by">
    @(NewsData?.PostedBy != null ? $"{NewsData.PostedBy.LastName} {NewsData.PostedBy.FirstName}" : "匿名用户")
</p>

额外注意事项

使用Html.RenderComponentAsync时,确保传递的News对象所有依赖属性(如PostedBy、TitleImage)都已正确初始化。如果业务场景中允许PostedBy为null,组件必须在代码中处理这种情况,避免空引用异常。

内容的提问来源于stack exchange,提问作者craftersmine

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 01:05:15