ASP.NET Core MVC出现NullReferenceException错误,求排查及MVC机制讲解
错误排查及ASP.NET Core MVC机制讲解
一、NullReferenceException错误排查
- 错误本质:你在视图的
@foreach (var item in Model)代码里,Model为null——控制器未向视图传递数据,或传递的Model未完成实例化。 - 按以下步骤排查:
- 检查控制器Action的返回逻辑
确保SiemensController的Index方法携带Model返回视图,而非空返回。正确写法示例:
错误写法包括public IActionResult Index() { // 替换为你获取西门子模块数据的实际逻辑(如解析JSON、调用设备接口等) var siemensModules = new List<JsonObject>(); // 实例化并填充数据(示例模拟数据) siemensModules.Add(new JsonObject { ModuleId = 1, Name = "S7-1200", Status = "正常" }); // 将Model传递给视图 return View(siemensModules); }return View();(未传Model),或传递未实例化的变量(如List<JsonObject> data = null; return View(data);)。 - 检查视图的@model指令
Index.cshtml的最顶部必须声明接收的Model类型,若传递的是集合,需写:
若传递单个@model IEnumerable<你的项目命名空间.JsonObject>JsonObject实例,则写@model 你的项目命名空间.JsonObject——类型必须与控制器传递的完全匹配,否则视图无法识别Model。 - 确认请求路由正确性
确保访问的URL指向SiemensController的Index方法(默认路由为/Siemens/Index),若访问的是其他控制器的视图,自然无法获取正确的Model。
- 检查控制器Action的返回逻辑
二、ASP.NET Core MVC核心机制讲解
MVC是Model-View-Controller的缩写,是一种按职责拆分代码的架构,三个组件各司其职:
- Model(模型):即你编写的
JsonObject.cs,负责存储和管理数据,仅关注数据结构与合法性,不处理页面展示或业务逻辑(比如西门子模块的ID、名称、状态等字段都定义在此)。 - Controller(控制器):
SiemensController.cs是核心调度者,负责:- 接收用户的HTTP请求(比如用户打开网站首页的请求);
- 处理业务逻辑(比如从西门子设备拉取数据、解析为
JsonObject集合); - 将准备好的Model传递给视图。
- View(视图):
Index.cshtml负责渲染页面,只能使用控制器传递的Model数据,将其转换为用户可阅读的HTML(比如用foreach循环把模块数据渲染成表格)。
MVC完整工作流程(以你的场景为例)
- 用户在浏览器输入
/Siemens/Index; - ASP.NET Core路由系统将请求转发给
SiemensController的Index方法; Index方法从西门子设备拉取数据,组装为List<JsonObject>类型的Model;Index方法调用return View(model),将Model传递给视图;- 视图
Index.cshtml接收Model,用@foreach循环遍历数据,生成带模块信息的HTML; - HTML返回至浏览器,用户看到展示的西门子模块数据。
内容的提问来源于stack exchange,提问作者Marie Lefort
相关产品推荐
相关产品推荐

