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

混用RazorPage与MVC引发Session NullReferenceException的原因问询

MVC项目中遗留Razor Page代码触发NullReferenceException的原因

核心冲突:@page指令搞混了视图类型

你在MVC的Index.cshtml里留了Razor Page专属的@page指令,这直接把原本的MVC视图改成了Razor Page来运行,两者的上下文体系完全不一样,直接导致空引用错误。

具体触发逻辑

  1. @page的本质作用:在ASP.NET里,@page是Razor Page的标识,只要加了这个指令,.cshtml文件就会被编译成Razor Page类,而不是MVC视图类。Razor Page是自包含的请求处理单元,不需要Controller就能响应请求,和MVC的Controller-View模式完全是两套机制。
  2. ViewData的上下文丢失:MVC里的ViewData是Controller在渲染视图前填充好的,但当视图被当成Razor Page运行时,系统不会走MVC的Controller渲染流程,ViewData对象本身可能就是null,或者根本没有被填充sessionId这个键值。你代码里直接访问@ViewData["sessionId"],自然就抛出了Object reference not set to an instance of an object的错误。
  3. Model绑定也会出问题(额外影响):你声明的@model TestMVCWebApp001.Models.DashboardPage在Razor Page里也无法正常接收MVC Controller传递的Model,因为Razor Page的Model绑定是基于自身的PageModel,和MVC的Model传递逻辑不兼容,大概率也会出现Model为null的问题,只是这次错误先触发在ViewData上。

总结

错误的根源就是@page指令导致视图的运行模式从MVC视图切换成了Razor Page,破坏了MVC原本的上下文传递机制,使得ViewData无法正常初始化和访问,最终触发空引用异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 01:27:15