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

不使用jQuery,如何将JS对象数组作为Ajax参数传给ASP.Net MVC控制器?

没问题,我来帮你搞定这个问题——不用任何JS库,纯原生代码就能把对象数组传给ASP.NET MVC控制器。你之前用GET拼接URL的方式只适合简单参数,要传复杂的对象数组,我们需要调整几个地方:

核心思路

  1. 把请求从GET改成POST:GET的URL长度有限,且传递复杂数据格式繁琐,POST的请求体更适合承载这类数据
  2. 将JS对象数组转为JSON字符串:用原生的JSON.stringify()方法处理
  3. 设置正确的请求头:告诉服务器我们发送的是JSON格式数据
  4. 调整控制器和模型类,确保能正确接收并绑定数据

修改后的原生JS代码

var data = [];
data.push(new person(1, "David"));
data.push(new person(2, "Karine"));
data.push(new person(3, "Annie"));

function person(_id, _name) {
    this.id = _id;
    this.name = _name;
}

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function () {
    if (xmlhttp.readyState == 4) {
        if (xmlhttp.status == 200) {
            var obj = JSON.parse(xmlhttp.responseText);
            // 处理返回的结果,这里保留你原来的逻辑
            for (var i = 0; i < obj.length; i++) {
                if (i == 1) {
                    alert(obj[i].name);
                }
            }
        } else {
            alert('请求出错了,状态码:' + xmlhttp.status);
        }
    }
};

// 改成POST请求,不需要在URL里拼参数
xmlhttp.open("POST", "/Home/AjaxTester", true);
// 关键:设置请求头,告知服务器请求体是JSON格式
xmlhttp.setRequestHeader("Content-Type", "application/json");
// 将JS对象数组转为JSON字符串发送
xmlhttp.send(JSON.stringify(data));

调整ASP.NET MVC端代码

1. 给Person类添加无参构造函数

MVC的模型绑定器需要无参构造函数来创建对象并赋值属性,否则会绑定失败,修改你的Person类:

public class Person
{
    public int id { get; set; } = 0;
    public string name { get; set; } = "";

    // 添加无参构造函数(必须)
    public Person() {}

    // 保留你原来的带参构造函数
    public Person(int _id, string _name)
    {
        this.id = _id;
        this.name = _name;
    }
}

2. 修改控制器Action

给Action添加[HttpPost]特性,确保它接受POST请求:

[HttpPost] // 必须添加,指定这个Action只处理POST请求
public JsonResult AjaxTester(List<Person> _person)
{
    // 这里可以处理传入的_person列表,比如做业务逻辑
    // 示例:返回处理后的对象
    var _someObjects = _person.Select(p => new { 
        id = p.id, 
        greeting = "Hello, " + p.name 
    });
    
    // 如果是ASP.NET MVC 5及以上,JsonRequestBehavior.AllowGet可以省略
    return Json(_someObjects, JsonRequestBehavior.AllowGet);
}

关键注意点

  • 请求头必须设置:如果不设置Content-Type: application/json,MVC的模型绑定器无法识别请求体里的JSON,会导致_person参数为null
  • 无参构造函数不能少:模型绑定器依赖它来实例化Person对象,没有的话会绑定失败
  • 用POST而不是GET:GET请求不适合传递复杂数据,且有URL长度限制,POST是更合适的选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:49:48