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

在Razor Page中检查Model是否为Null时触发NullReferenceException的原因及解决咨询

在Razor Page中检查Model是否为Null时触发NullReferenceException的原因及解决方法

嘿,我完全懂你现在的困惑——明明是在检查对象是否为空,结果反而抛出了空引用异常,这看起来完全违背逻辑对吧?别着急,这个问题的根源其实藏在一个很容易被忽略的细节里,咱们一步步来拆解。

问题回顾

你创建了一个ASP.NET Core 8的Razor Pages项目,做了这些操作:

  • 在Pages/Shared下创建了名为_Airplane的部分视图,对应的PageModel有PilotName属性
  • 在Index页面实例化这个模型并传递给部分视图,一开始运行正常
  • 但在_Airplane.cshtml里添加@if (Model != null)的检查后,反而触发了NullReferenceException

核心原因:错误地给Partial View加上了@page指令

问题就出在你的_Airplane.cshtml第一行的@page上!

@page是Razor Pages的核心指令,它的作用是把当前.cshtml文件标记为一个独立的、可通过路由直接访问的Razor Page。而Partial View(部分视图)本质上是用来被其他页面引用的子视图,根本不需要这个指令。

当你给Partial View加上@page后,这个视图生成的后台类会继承自Page类型,它的Model属性的getter方法内部会依赖完整的页面路由上下文来获取模型。但当你把它作为Partial渲染时,它并没有处于一个独立页面的上下文环境中,此时访问Model属性本身就会触发内部的空引用异常——也就是说,你写的Model != null并不是在判断模型对象是否为空,而是在尝试访问一个内部已经出错的Model属性,所以才抛出了异常。

解决方法:移除Partial View中的@page指令

只需要修改_Airplane.cshtml,删掉第一行的@page:

@model Stackoverflow1.Pages.Shared._AirplaneModel
@{ }

<p>The name of the pilot is:</p>
@if (Model != null)
{
    @if (Model.PilotName != null)
    {
        @if (Model.PilotName.Length > 0)
        {
            <h4>@Model.PilotName</h4>
        }
    }
}

现在再运行项目,你会发现之前的空引用异常消失了,Model != null的检查也能正常工作——因为此时这个视图是标准的Partial View,它的Model属性就是你从Index页面传递过来的实例,不会再因为路由上下文缺失而抛出异常。

额外小贴士

  • 记住:只有独立的Razor Page(比如Index.cshtml、About.cshtml这些可以直接通过URL访问的页面)才需要@page指令
  • Partial View的命名习惯通常以下划线开头(比如_Airplane.cshtml),这也能帮助你区分独立页面和部分视图,避免误加@page

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:29:29