在使用Razor和C#的MVC结构中,我试图将数据库中的数据显示为jquery DataTable。但是,我对数据表序列化和解释JSON数据的方式存在问题。
Javascript(在CSHTML页面上):
<script>
$(document).ready(function () {
var validBarcode = @Model.ActiveBarcode.ToString();
$('#example').DataTable({
"ajax": {
"url": '@Url.Action("ParseLogChangesData", "Article")',
"dataSrc": '',
"data": {barcode: barcode},
"type":"POST"
},
"columns": [
{data: 'Header1'},
{data: 'Header2'},
{data: 'Header3'},
{data: 'Header4'},
{data: 'Header5'},
{data: 'Header6'},
{data: 'Header7'}
]
});
});
</script>
ParseLogChangesData(在控制器中):
public ActionResult ParseLogChangesData(string barcode)
{
if (barcode!= null && barcode!= "0")
{
Changelog log = new Changelog(barcode);
string json = JsonConvert.SerializeObject(log);
return Json(json, JsonRequestBehavior.AllowGet);
}
else
return null;
}
日志对象是从对我的数据库的LINQ查询构造的。
ParseLogChangesData返回的“json”字符串包含一个格式化的对象列表:
“[{\” 头1 \ “:\” 值1 \ “\ ”头2 \“:\ ”值2 \“,\ ”Header3 \“:\ ”值3 \“ \ ”Header4 \“:\”值4 \ “\ ”Header5 \“:\ ”值5 \“,\ ”Header6 \“:\ ”Value6 \“,\ ”Header7 \“:\ ”Header7 \“},{\ ”头1 \“:\” VALUE1 \”,[...]}
根据该数据,我应该能够构建一个jquery DataTable,因为它似乎根据datatables.net上的示例正确格式化。
但是,如果我查看在浏览器中发送的响应(此处显示在Firefox中,但我对IE11有同样的问题,这是需要工作的):
等等每个对象。
因此获得如此错误:
因为当jquery.DataTables尝试完成它的工作时:
// Got the data - add it to the table
for ( i=0 ; i<aData.length ; i++ ) {
_fnAddData( settings, aData[i] );
}
aData.length是4976 ......它首先找不到“Header1”,但是“H”!
我可能会遗漏数据被序列化的方式,但我不知道它可能是什么。你能帮我解决这个问题吗?
答案 0 :(得分:1)
更改ParseLogChangesData
功能。替换:
string json = JsonConvert.SerializeObject(log);
return Json(json, JsonRequestBehavior.AllowGet);
使用:
return Json(log);