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

如何将表格选中行数据传递至HttpGet类型的SummaryReport控制器方法

解决ASP.NET Core中GET请求传递复杂对象集合的问题

问题根源

GET请求通过URL查询字符串传递参数,ASP.NET Core的模型绑定要求集合参数遵循fleets[0].PropertyName=值的索引式格式,但jQuery默认传递对象数组时,生成的参数格式不符合服务器解析规则,导致无法绑定为List<FleetSummViewModel>。

解决方案1:手动构建符合绑定规则的查询参数

修改JavaScript中的EditbreakDown函数,将对象数组转换为ASP.NET Core可识别的键值对格式:

function EditbreakDown() {
    var fleets = [];
    var selectedRows = table.rows('.selected').nodes();
    $(selectedRows).each(function() {
        var fleet = {};
        fleet.CustomerCode = table.cell(this, 0).data();
        fleet.RegNo = table.cell(this, 2).data();
        fleet.FleetNo = table.cell(this, 3).data();
        fleet.FleetDate = table.cell(this, 4).data();
        fleets.push(fleet);
    })

    // 构建符合绑定要求的查询参数
    var queryParams = {};
    fleets.forEach(function(fleet, index) {
        queryParams[`fleets[${index}].CustomerCode`] = fleet.CustomerCode;
        queryParams[`fleets[${index}].RegNo`] = fleet.RegNo;
        queryParams[`fleets[${index}].FleetNo`] = fleet.FleetNo;
        queryParams[`fleets[${index}].FleetDate`] = fleet.FleetDate;
    });

    $.ajax({
        type: "GET",
        url: "/FleetCheck/SummaryReport",
        data: queryParams,
        success: function (response) {
            console.log("数据传递成功");
        },
        error: function (response) {
            console.log("请求失败");
        }
    });      
}

控制器代码保持不变:

public class FleetSummViewModel
{
    public string CustomerCode { get; set; }        
    public string Depot { get; set; }
    public string FleetNo { get; set; }
    public string RegNo { get; set; } 
    public string FleetDate { get; set; }      
} 

[HttpGet]
public IActionResult SummaryReport(List<FleetSummViewModel> fleets)
{
    // 业务处理逻辑
    return View();
}

解决方案2:序列化JSON字符串后传递,控制器手动反序列化

如果对象结构复杂,可将数组序列化为JSON字符串,在控制器中接收后反序列化:

JavaScript修改:

function EditbreakDown() {
    var fleets = [];
    var selectedRows = table.rows('.selected').nodes();
    $(selectedRows).each(function() {
        var fleet = {};
        fleet.CustomerCode = table.cell(this, 0).data();
        fleet.RegNo = table.cell(this, 2).data();
        fleet.FleetNo = table.cell(this, 3).data();
        fleet.FleetDate = table.cell(this, 4).data();
        fleets.push(fleet);
    })

    $.ajax({
        type: "GET",
        url: "/FleetCheck/SummaryReport",
        data: { fleetsJson: JSON.stringify(fleets) },
        success: function (response) {
            console.log("数据传递成功");
        },
        error: function (response) {
            console.log("请求失败");
        }
    });      
}

控制器修改:

using Newtonsoft.Json; // 需要引用Newtonsoft.Json NuGet包

public class FleetSummViewModel
{
    public string CustomerCode { get; set; }        
    public string Depot { get; set; }
    public string FleetNo { get; set; }
    public string RegNo { get; set; } 
    public string FleetDate { get; set; }      
} 

[HttpGet]
public IActionResult SummaryReport(string fleetsJson)
{
    List<FleetSummViewModel> fleets = JsonConvert.DeserializeObject<List<FleetSummViewModel>>(fleetsJson);
    // 业务处理逻辑
    return View();
}

注意事项

  • GET请求存在URL长度限制,若选中行数量过多,可能导致参数被截断,这种情况建议优先使用POST请求,或分批处理数据。
  • 确保传递的日期格式符合服务器解析要求,避免绑定失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 06:27:40