.NET Core MVC中Datatable绑定JSON数据显示空行求助
问题排查与解决方案
一、控制器代码核心问题
你的控制器代码存在实例初始化错误的严重问题:
TestInfo test = JsonConvert.DeserializeObject<TestInfo>(json);
这里的json变量完全未定义,直接反序列化会导致test对象为空甚至抛出异常。正确的做法是直接初始化TestInfo并创建Data集合实例:
public JsonResult Get_list(long? subject_id) { DataTable dt = ExamDA.GetTestBySubjectId((long)subject_id, GetString()); // 正确初始化TestInfo和Data集合 TestInfo test = new TestInfo { Data = new List<TestData>() }; foreach (DataRow dr in dt.Rows) { test.Data.Add(new TestData() { Id = Convert.ToInt32(dr["Id"]), Name = dr["Name"].ToString(), DifficultyLevel = dr["DifficultyLevel"].ToString(), CorrectMarks = Convert.ToDecimal(dr["CorrectMarks"]), WrongMarks = Convert.ToDecimal(dr["WrongMarks"]), strStartDate = dr["StartDate"].ToString(), strEndDate = dr["EndDate"].ToString(), }); } return Json(test); }
同时要确保TestInfo和TestData类的属性均为public修饰符,否则JSON序列化时会忽略这些字段。
二、Datatable配置错误
你的列配置存在两个关键问题:
data值未加引号:JS中{ "data": Id }会把Id当作变量而非字符串字段名,导致无法匹配返回的JSON字段。- 未指定数据来源:控制器返回的是包含
Data数组的TestInfo对象,需要明确告诉Datatable从Data属性读取数据。
修正后的Datatable配置:
$(document).ready(function() { $('#yourTableId').DataTable({ ajax: { url: '/YourController/Get_list', // 替换为实际控制器路由 type: 'GET', data: function(d) { d.subject_id = 123; // 替换为实际的subject_id参数值 }, dataSrc: 'Data' // 指定从返回JSON的Data属性取数据 }, columns: [ { "data": "Id" }, { "data": "Name" }, { "data": "DifficultyLevel" }, { "data": "CorrectMarks" }, { "data": "WrongMarks" } ] }); });
三、额外排查步骤
- 查看网络请求:在浏览器开发者工具的「网络」标签,检查接口返回的JSON结构是否正确,确认
Data数组包含数据,且字段名与列配置完全一致(注意大小写敏感)。 - 检查控制台错误:查看浏览器控制台是否存在JS语法错误或数据匹配报错,比如字段未找到的提示。
- 验证序列化结果:可在控制器中临时将JSON输出到日志,确认序列化后的结构符合预期。
内容的提问来源于stack exchange,提问作者Partha
相关产品推荐
相关产品推荐

