DataTable 2.0.6在WebForms(VB)中内置Ajax配置调用失败问题
解决DataTables 2.0.6内置Ajax调用ASP.NET WebForms WebMethod失败的问题
问题核心:直接用DataTables内置Ajax配置调用WebMethod时,参数传递格式和响应解析不符合ASP.NET WebForms的要求,导致后台方法未触发,返回整个HTML页面;而单独用$.ajax获取数据后再初始化DataTable可行。
解决方案
修改DataTables的Ajax配置,调整数据传递方式并指定响应数据的提取路径:
$('#TempEmployeeTable').DataTable({ ajax: { type: 'POST', url: 'Index.aspx/TempGetEmployeeData', // 用函数返回JSON字符串,确保请求体格式正确 data: function() { return JSON.stringify({ Sqloption: 21 }); }, contentType: 'application/json; charset=utf-8', dataType: 'json', // 提取WebMethod返回的d属性中的实际数据 dataSrc: function(response) { return response.d; } } });
原因说明
参数传递格式问题:
原无效代码中直接将JSON.stringify的结果赋值给data,DataTables会默认把这个字符串当作普通表单参数(以data为键、JSON字符串为值)发送,而非作为请求体的JSON内容。ASP.NET WebMethod无法解析这种格式的参数,因此不会触发后台方法,最终返回整个页面HTML。
改用函数返回JSON字符串后,DataTables会将其直接作为请求体发送,符合WebMethod的参数解析要求。响应数据解析问题:
ASP.NET WebMethod返回的JSON会被包裹在d属性中(这是WebForms的默认行为),而DataTables默认会直接使用整个响应对象作为数据源。通过dataSrc函数提取response.d,才能正确获取到后台返回的表格数据。GET请求的局限性:
WebMethod默认禁用GET请求,若要使用需额外添加<ScriptMethod(UseHttpGet := True)>特性,且GET请求传递复杂参数容易出现格式问题,因此推荐保持POST请求。
内容的提问来源于stack exchange,提问作者Dyst
相关产品推荐
相关产品推荐

