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

通过Ajax传递对象列表时触发NullReferenceException问题求助

解决Ajax传递ViewModel时列表为Null的NullReferenceException问题

看起来你遇到了ASP.NET MVC中Ajax传参时模型绑定失败的典型问题——控制器接收到的StudentsVM实例里Students列表是null,导致访问Count属性时抛出空引用异常。我来帮你一步步排查解决:

首先检查ViewModel的定义

最容易忽略的点是Students属性没有初始化,导致即使模型绑定成功,它也还是null。修改你的StudentsVM类,在构造函数里初始化列表:

public class StudentsVM
{
    public StudentsVM()
    {
        // 提前初始化列表,避免null
        Students = new List<Student>();
    }

    public List<Student> Students { get; set; }
    // 其他需要的属性...
}

然后修正Ajax请求的写法

Ajax请求的格式和请求头设置是模型绑定成功的关键,很多人会在这里出错:

// 先构造和ViewModel结构完全匹配的数据
var studentListData = {
    Students: [
        { Id: 1, Name: "小明" },
        { Id: 2, Name: "小红" }
        // 这里的属性名要和后端Student类的属性完全对应
    ]
};

$.ajax({
    url: '@Url.Action("AddStudents", "你的控制器名")',
    type: 'POST',
    // 必须设置这个Content-Type,告诉后端接收JSON格式
    contentType: 'application/json; charset=utf-8',
    // 一定要把JS对象转成JSON字符串,否则模型绑定会失败
    data: JSON.stringify(studentListData),
    success: function(response) {
        console.log("请求成功:", response);
    },
    error: function(xhr) {
        console.error("请求出错:", xhr.responseText);
    }
});

优化控制器的接收逻辑

可以给参数加上[FromBody]特性(MVC中虽然默认支持,但显式声明更保险),同时增加空值判断避免异常:

[HttpPost]
public ActionResult AddStudents([FromBody] StudentsVM students)
{
    // 先做基础的空值检查
    if (students == null)
    {
        return Json("未接收到有效数据");
    }

    if (students.Students == null)
    {
        return Json("学生列表为空");
    }

    // 现在可以安全访问Count了
    return Json("Successfull " + students.Students.Count);
}

额外调试技巧

如果还是有问题,可以检查模型绑定是否有错误:

[HttpPost]
public ActionResult AddStudents([FromBody] StudentsVM students)
{
    if (!ModelState.IsValid)
    {
        // 把绑定错误信息返回,方便前端调试
        var errorMessages = ModelState.Values
            .SelectMany(v => v.Errors)
            .Select(e => e.ErrorMessage);
        return Json($"模型绑定失败:{string.Join(";", errorMessages)}");
    }

    // 后续逻辑...
}

核心问题总结:你的Ajax请求要么是数据结构和ViewModel不匹配,要么是没有设置正确的contentType,或者ViewModel的列表属性没初始化,导致模型绑定后Students还是null。按照上面的步骤调整,应该就能解决问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:29:10