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

ASP.NET Core MVC传递DataTable行ID至存储过程过滤第二个DataTable问题

问题排查与解决方案

1. 修正Ajax请求的参数传递格式

控制器接收null的核心原因大多是请求数据格式与后端绑定规则不匹配,以下是两种可靠的写法:

方式1:JSON格式传递(推荐)

$('#rowButton').click(function() {
    var rowId = $(this).data('id'); // 确认此处已正确获取行ID
    $.ajax({
        url: '/YourController/LoadSecondDataTable',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({ id: rowId }), // 将ID包装为对象并序列化
        success: function(result) {
            // 销毁并重新初始化第二个DataTable
            $('#secondTable').DataTable().destroy();
            $('#secondTable').DataTable({
                data: result,
                columns: [
                    // 你的列配置项
                ]
            });
        }
    });
});

方式2:表单格式传递

$('#rowButton').click(function() {
    var rowId = $(this).data('id');
    $.ajax({
        url: '/YourController/LoadSecondDataTable',
        type: 'POST',
        data: { id: rowId }, // 直接传键值对,jQuery自动处理为表单格式
        success: function(result) {
            // 渲染第二个DataTable的逻辑
        }
    });
});

2. 匹配控制器的参数绑定规则

根据Ajax的传递格式,调整控制器方法的参数绑定特性:

对应JSON格式的控制器写法

需添加[FromBody]明确从请求体读取JSON数据:

public IActionResult LoadSecondDataTable([FromBody] int id)
{
    // 调用存储过程(参数化查询避免注入)
    var idParam = new SqlParameter("@Id", id);
    var filteredData = _context.TargetEntity.FromSqlRaw("EXEC YourStoredProcedure @Id", idParam).ToList();
    return Json(filteredData);
}

对应表单格式的控制器写法

可直接使用参数(默认从表单绑定),或添加[FromForm]明确来源:

public IActionResult LoadSecondDataTable(int id) // 或 [FromForm] int id
{
    var filteredData = _context.TargetEntity.FromSqlRaw("EXEC YourStoredProcedure @Id = {0}", id).ToList();
    return Json(filteredData);
}

3. 存储过程与EF调用校验

  • 确认存储过程的参数名称与你传递的一致(比如存储过程定义为CREATE PROCEDURE YourStoredProcedure @Id INT)
  • 使用EF Core的参数化查询调用存储过程,避免SQL注入同时确保参数传递准确

4. 调试排查技巧

  • 打开浏览器F12的网络标签,查看Ajax请求的请求体/表单数据,确认ID是否正确发送
  • 在控制器方法内加断点,检查参数值与请求的Content-Type是否匹配
  • 若用查询字符串传递(GET请求),确保URL格式为/YourController/LoadSecondDataTable?id=xxx,控制器参数名与查询键一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:52:14