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

如何将JavaScript对象数组通过POST传递至MVC控制器方法

解决方案:通过AJAX传递对象数组到ASP.NET Controller并处理

Got it, let's break this down into frontend and backend steps to make sure your array of objects gets properly sent and processed.


前端(jQuery/AJAX)部分

首先,确保你构造的obj_rows数组结构正确,然后通过AJAX把它以JSON格式发送到后端。

1. 构造对象数组(参考示例)

先确认你遍历表格行的逻辑没问题,比如:

// 遍历表格行,生成对象数组
var obj_rows = [];
$('table tr').each(function(index) {
    // 跳过表头行(如果有的话)
    if (index === 0) return;
    
    var $row = $(this);
    obj_rows.push({
        param1: $row.find('.cell-param1').text().trim(), // 根据你的表格结构调整选择器
        param2: $row.find('.cell-param2').val().trim(),  // 输入框用val(),纯文本用text()
        param3: $row.find('.cell-param3').text().trim()
    });
});

// 先在控制台检查数组结构是否符合预期
console.log('待提交的数据:', obj_rows);

2. 发送AJAX POST请求

关键是要把数组序列化为JSON字符串,并指定正确的contentType,这样后端才能正确解析:

$.ajax({
    url: '/SomeController/SomeAction', // 确保URL路径正确,有Area的话要加上Area名
    type: 'POST',
    contentType: 'application/json; charset=utf-8', // 必须指定,告诉后端是JSON格式
    data: JSON.stringify(obj_rows), // 将数组转为JSON字符串
    success: function(response) {
        // 处理成功回调
        console.log('处理结果:', response);
        alert(`成功处理了 ${response.count} 条数据!`);
    },
    error: function(xhr, status, err) {
        // 处理错误情况
        console.error('提交失败:', err);
        alert('数据提交出错,请检查控制台信息或重试!');
    }
});

后端(ASP.NET Controller)部分

你需要定义一个匹配前端对象结构的模型类,然后在Action中接收并遍历处理这个数组。

1. 定义模型类

创建一个和前端对象属性对应的类:

// 模型类,属性名要和前端对象的键对应(默认大小写不敏感,也可以用特性指定)
public class RowDataModel
{
    public string Param1 { get; set; }
    public string Param2 { get; set; }
    public string Param3 { get; set; }
    
    // 如果前端传的是数字/布尔值,这里要对应改成int/bool类型
}

2. 编写Controller Action

在你的SomeController中添加SomeAction方法,注意加上[HttpPost]和[FromBody]特性:

public class SomeController : Controller
{
    [HttpPost]
    public IActionResult SomeAction([FromBody] List<RowDataModel> rows)
    {
        // 校验数据是否有效
        if (rows == null || !rows.Any())
        {
            return BadRequest("未接收到有效数据");
        }

        // 遍历处理每个对象
        foreach (var row in rows)
        {
            // 这里写你的业务逻辑:比如保存到数据库、计算、调用服务等
            // 示例:_dbContext.RowData.Add(row);
        }

        // 返回成功响应
        return Ok(new { count = rows.Count, message = "数据处理完成" });
    }
}

关键注意事项

  • [FromBody] 必须加:这个特性告诉ASP.NET从请求体中读取JSON数据,而不是从URL参数或表单中获取。
  • 属性名匹配:如果前端的键名和后端模型属性名不一致(比如前端是param1,后端是MyParam1),可以用[JsonPropertyName("param1")](.NET Core+)或者[JsonProperty("param1")](Newtonsoft.Json)来指定映射。
  • 数据类型一致:确保前端传递的数值类型和后端模型属性类型匹配(比如前端传数字,后端用int而不是string)。
  • 跨域问题:如果前端和后端不在同一个域名下,需要在后端配置CORS(跨域资源共享)。
  • 调试技巧:可以用浏览器的开发者工具(Network标签)查看AJAX请求的Payload是否正确,以及后端的响应状态码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:48:41