如何将表格选中行数据传递至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
相关产品推荐
相关产品推荐

