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

如何将JavaScript对象数组提交至C# MVC接收元组数组的Action方法?

解决JavaScript对象数组传递到MVC值元组数组Action的问题

这个问题我之前也踩过坑,主要是MVC默认的模型绑定器对值元组数组的支持不够顺畅,再加上$.post默认的请求格式不适合复杂数组传递,才导致你的objectArray一直是null。下面给你几个实用的解决方案:

方案一:改用自定义类代替值元组(最推荐)

值元组虽然简洁,但模型绑定器对它的数组类型处理不如普通类直观。你可以先定义一个和JS对象结构匹配的类:

public class ItemModel
{
    public int Id { get; set; }
    public string Value { get; set; }
}

然后把Action方法的参数改成这个类的数组:

public JsonResult Test(ItemModel[] objectArray)
{
    return Json(objectArray != null);
}

JS代码不需要任何修改,直接用你原来的$.post('test', objectArray)就行,MVC的模型绑定器会自动把JS对象映射到类的属性上,这样参数就能正确接收了。

方案二:调整JS请求格式,用JSON传递(保留值元组)

如果你一定要用值元组,那需要修改JS的请求方式,确保数据以JSON格式发送——$.post默认会把数据序列化为表单格式,这种格式下模型绑定器无法正确解析值元组数组。

修改后的JS代码:

var objectArray = [ { id: 1, value: "one" }, { id: 2, value: "two" } ];
$.ajax({
    url: 'test',
    type: 'POST',
    contentType: 'application/json', // 关键:指定请求内容类型为JSON
    data: JSON.stringify(objectArray), // 将数组转为JSON字符串
    success: function(result) {
        console.log(result);
    }
});

这样你的原Action方法public JsonResult Test((int id, string value)[] objectArray)就能正确接收到数据了,因为MVC的模型绑定器可以解析JSON格式中的命名参数,和值元组的命名匹配上。

为什么原来的代码会失败?

  • $.post默认的contentType是application/x-www-form-urlencoded,它会把数组序列化成类似objectArray[0].id=1&objectArray[0].value=one的格式,这种格式下模型绑定器无法识别值元组的结构。
  • MVC默认模型绑定器对值元组数组的支持有限,尤其是表单格式的请求,很难自动映射到值元组的元素上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:27:38