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

ASP.NET Core Razor条件渲染:空值检查仍抛空对象异常问询

为什么做了空值检查还是抛出Nullable异常?

嘿,这个问题大概率是Razor视图的语法使用错误导致的!咱们一步步拆解:

核心问题:你的if语句没被当成C#代码执行

看你写的代码片段:

if (@item.Date.HasValue) { <div> <text>@Common.DateConverter.GetHijriDateString(item.Date.Value)</text> </div> }

在Razor视图里,要执行C#条件判断、循环这类代码,必须用@开头来切换到代码模式。你现在的if前面没有加@,Razor会把整个if (@item.Date.HasValue)当成普通的HTML文本输出,根本不会执行条件判断!

这就导致后面的<div>和里面的@Common.DateConverter.GetHijriDateString(item.Date.Value)不管item.Date是不是null,都会被解析执行。当item.Date为null时,强行访问.Value自然就抛出Nullable object must have a value异常了。

修复方法:给if加上@,让它成为C#代码块

正确的写法应该是这样的:

@if (item.Date.HasValue)
{
    <div>
        @Common.DateConverter.GetHijriDateString(item.Date.Value)
    </div>
}

加了@之后,Razor会识别这是C#条件判断,只有当item.Date.HasValue为true时,才会执行大括号里的内容,避免了null值访问。

其他可能的排查方向

如果上面的修复没用,你可以再检查这两个点:

  • 有没有在其他代码位置(比如if块之外)也直接访问了item.Date.Value?
  • 会不会是Common.DateConverter.GetHijriDateString方法内部有问题?比如方法里又尝试访问了某个未初始化的Nullable值?

更简洁的替代写法

你也可以用空条件运算符+空合并来简化代码,避免显式的if判断:

<div>
    @(item.Date.HasValue ? Common.DateConverter.GetHijriDateString(item.Date.Value) : string.Empty)
</div>

或者如果你的日期转换方法能处理默认值的话:

<div>
    @Common.DateConverter.GetHijriDateString(item.Date ?? DateTime.MinValue)
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 10:43:17