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

Razor Pages代码后置文件配置异常:@Model空引用错误排查

解决Razor Pages中@Model空引用错误

问题描述

刚接触Razor Pages,尝试用代码后置文件分离逻辑,在Index类的OnGet方法中初始化日期数据,但在.cshtml中调用@Model.date时出现「Object reference not set to an instance of an object.」错误,直接调用@Model.num也会触发同样错误,推测OnGet方法未执行,但不清楚原因。此前直接在Razor页面写代码可正常运行,改用代码后置后陷入瓶颈。

相关代码:

Razor页面代码

@page
@model SportData.Web.Views.Home.Index

<div class="date">
    <h1>Aggiornamento lista in data @Model.date</h1> <!-- 错误发生位置 -->
</div>

代码后置文件代码

using Microsoft.AspNetCore.Mvc.RazorPages;

namespace SportData.Web.Views.Home
{
    public class Index : PageModel
    {
        List<string> months = new List<string>();
        public DateTime date { get; set; }

        public int num = 4; // 调用这个变量也会触发相同错误
        public DateTime specificDate { get; set; }
         
        public void OnGet() {
            date = DateTime.Now;
            specificDate = new DateTime(2022, 08, 01);
        }
    }
}

调试截图:
调试结果截图

问题根源

你混淆了Razor Pages和MVC的文件结构:

  • Razor Pages的页面和代码后置文件默认必须放在Pages目录下,框架会自动识别该目录下的PageModel并实例化。
  • 你把文件放在了Views/Home目录,这是MVC控制器视图的存放位置,Razor Pages框架不会处理这个位置的PageModel,导致页面的@Model始终为null,自然触发空引用错误。

解决方案

1. 调整文件结构

将Index.cshtml和Index.cshtml.cs移动到Pages/Home目录下(如果Home文件夹不存在,直接新建即可)。

2. 修正命名空间

修改代码后置文件的命名空间,与文件结构对应:

// 原命名空间:SportData.Web.Views.Home
namespace SportData.Web.Pages.Home
{
    // ... 其余代码不变
}

3. 修正Razor页面的@Model指令

更新.cshtml文件中的@Model引用,匹配新的命名空间:

@page
@model SportData.Web.Pages.Home.Index

<div class="date">
    <h1>Aggiornamento lista in data @Model.date</h1>
</div>

额外建议(遵循Razor Pages命名约定)

虽然不强制,但建议将代码后置类名改为IndexModel(页面名+Model),这是Razor Pages的标准命名规范,避免和其他类型冲突:

public class IndexModel : PageModel
{
    // ... 其余代码不变
}

对应的Razor页面@Model也要改成:

@model SportData.Web.Pages.Home.IndexModel

完成以上调整后,重新编译运行,框架会正确实例化PageModel并执行OnGet方法,页面就能正常显示@Model中的数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:20:35