问题描述
按照此存储库中的示例实现 jquery Datatable 服务器端处理 https://github.com/DavidSuescunPelegay/jQuery-datatable-server-side-net-core
加载结果的控制器是这样定义的
[HttpPost]
public async Task<IActionResult> LoadTable([FromBody]DtParameters dtParameters)
{
return Json(new DtResult<TestRegister>
{
Draw = dtParameters.Draw,RecordsTotal = totalResultsCount,RecordsFiltered = filteredResultsCount,Data = await result
.Skip(dtParameters.Start)
.Take(dtParameters.Length)
.ToListAsync()
});
}
TestRegister、DtResult 类从存储库复制
https://github.com/DavidSuescunPelegay/jQuery-datatable-server-side-net-core/blob/master/src/jQueryDatatableServerSideNetCore/Models/DatabaseModels/TestRegister.cs
https://github.com/DavidSuescunPelegay/jQuery-datatable-server-side-net-core/blob/master/src/jQueryDatatableServerSideNetCore/Models/AuxiliaryModels/DatatableModels.cs
我将类更改为我自己的自定义类 StudentMaster ,它是实体框架 Db 表的表示形式,它具有一些属性和相关表,例如
public class StudentMaster
{
public StudentMaster();
[MaxLength(50)]
public string identifier { get; set; }
public string Name { get; set; }
...
..
...
...
..
public StudentType SType { get; set; }
...
..
...
public ICollection<Exam> Exams { get; set; }
}
现在我从控制器返回这个类,没有异常,调试器正在返回 Json 行
var query = // my actual sql query to fetch data from db table with all conditions
var response = new DtResult<AppEntities.StudentMaster>
{
Draw = dtParams.Draw,Data = query
.Skip(dtParams.Start)
.Take(dtParams.Length)
.ToListAsync()
};
try
{
return Json(response);
}
catch(Exception ex)
{
return Content("NOK");
}
但是我没有在 HTML 中得到任何响应,而是在控制台我可以看到这个错误并且调试器没有命中任何异常。我可以看到调试器正在传递返回 Json 行
VM71:1 POST https://localhost:44320/Students/LoadTable net::ERR_CONNECTION_RESET 200 (OK)
调试器一直到 DtResult 类的那一行,然后调试没有进展,我可以在浏览器控制台中看到 ERR_CONNECTION_RESET 消息
public IEnumerable<T> Data { get; set; }
有什么方法可以调试此错误的原因,了解此行发生的情况以及调试器没有进一步移动的原因。是因为属性错误还是 是因为我传递的数据类型错误(对象列表)还是其他原因?
我尝试用自定义定义的项目列表替换数据,其中只有 2 个属性,如下所示,没有问题
List<AppEntities.StudentMaster> fakeItems = Enumerable.Range(0,100).Select(i => new AppEntities.StudentMaster
{
Name = "Name " + i,identifier = "identifier" + i
}).ToList();
所以看起来数据有问题,但不知道如何调试
解决方法
在要调试 jquery 的地方应用“调试器”。然后将其上传到服务器,然后您就可以轻松调试了。 例如以下:
function func(){
//Some stuff
debugger; //Debugging is automatically started from here
//Some stuff
}
func();