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

ASP.NET MVC中Index视图Model.get返回NullReferenceException问题

问题分析与解决方案

你遇到的NullReferenceException核心原因是Index视图接收到的Model为null,直接访问@Model.Name这类属性时触发了空引用错误。下面是具体问题点和修复步骤:

问题根源拆解

  1. 控制器返回视图时未传递模型:比如Index方法中ModelState无效时,直接返回return View();,没有把catDetails实例传给视图,导致视图的@Model为null。
  2. 视图未做空值校验:直接访问@Model的属性,没有判断模型是否存在。
  3. Create的Post方法未做验证:直接把可能无效的模型传给Index视图,跳过了校验逻辑。

具体修复步骤

1. 给Index视图增加空值判断

修改视图代码,先检查模型是否存在,再渲染内容:

@model Cat
@{
    ViewData["Title"] = "Index";
}

<h2>Cat</h2>

@if (Model != null)
{
    <table class="table table-sm table-bordered table-striped">
        <tr><th>name:</th><td>@Model.Name</td></tr>
        <tr><th>Age:</th><td>@Model.Age</td></tr>
        <tr><th>Colouring:</th><td>@Model.Colouring</td></tr>
        <tr><th>KidFriendly:</th><td>@Model.KidFriendly</td></tr>
        <tr><th>Personality:</th><td>@Model.Personality</td></tr>
    </table>
}
else
{
    <p>暂无猫咪领养信息</p>
}

2. 修复控制器的Index方法

确保返回视图时始终传递模型实例,避免@Model为null:

public IActionResult Index(Cat catDetails)
{
    // 自定义验证逻辑(补充DataAnnotations未覆盖的规则)
    if (catDetails.Id < 0)
        ModelState.AddModelError(nameof(catDetails.Id), "Id不能小于0");

    if (catDetails.Age < 1 || catDetails.Age > 20)
        ModelState.AddModelError(nameof(catDetails.Age), "年龄必须在1-20之间");

    if (ModelState.IsValid)
        return View(catDetails);
    else
        // 必须传递模型,否则视图接收不到实例
        return View(catDetails);
}

3. 优化Create的Post方法

增加模型验证,无效时返回表单页面,有效再跳转到Index:

[HttpPost]
public IActionResult Create(Cat model)
{
    // 利用模型的DataAnnotations自动验证,无需手动重复判断
    if (ModelState.IsValid)
    {
        // 可在此处将模型保存到repository
        repository.AddCat(model);
        return View("Index", model);
    }
    else
    {
        // 验证失败,返回表单页面并显示错误
        return View(model);
    }
}

4. 简化模型验证逻辑

你的Cat模型已经通过[Required]等特性标记了校验规则,ASP.NET Core会自动完成基础验证,不需要在控制器里重复写string.IsNullOrEmpty这类判断,只需要保留自定义的规则(比如年龄范围)即可。


额外说明:你猜测的Colouring下拉框空值问题,只会导致Model.Colouring为null,不会让Model本身为null,所以不是触发本次错误的原因。

内容的提问来源于stack exchange,提问作者Síofra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:15:32