如何解决如何为作为数组元素的DataTables列定义数据源?
这是在C#ASP.NET MVC 5 Web应用程序中。 jQuery 1.10.2版。 DataTables jQuery插件版本1.10.21。
Web应用程序中的页面使用数据表。 DataTable配置为服务器端处理模式。因此,当它接收到来自服务器的响应时,表中一行的数据就是一个对象,如下例所示。 (这是不正确的JSON语法;我试图表示在浏览器调试器的监视窗口中看到的内容。)即,每一行都有一个字符串名称和一个评分对象数组。
row: {...}
Id: 42
Name: "Fred"
Grades: (3) [...]
0: {...}
Id: 101
Name: "Quiz 1"
Value: "A"
1: {...}
Id: 102
Name: "Homework 2"
Value: "B"
2: {...}
Id: 103
Name: "Exam 3"
Value: "C"
length: 3
在DataTable中,我需要4列:一列为名称,三列为多个年级,如以下示例所示。
Name Quiz 1 Homework 2 Exam 3
=========================================
Fred A B C
我的问题是,我无法为每个成绩列确定数据源的正确表示法,因此,当呈现此类列中的单元格时,回调函数将接收包含有关成绩数据的对象。以下是我在页面的CSHTML
文件中尝试过的内容。 (我通过ViewBag
属性在页面上提供了分数等级。)
...
<table id="gradebook-table" class="table">
...
</table>
...
<script>
$( document ).ready( onPageReady );
function onPageReady()
{
var options = {};
options.serverSide = true;
options.ajax =
{
'url': '@Url.Content( "~/gradebook/load" )','type': 'POST',};
var c = 0;
options.columnDefs = [
{ targets: c++,data: "Id",visible: false,searchable: false },{ targets: c++,data: "Name" },];
for ( var i = 0; i < @ViewBag.GradeCount; i++ )
{
var def = {};
def.targets = c++;
def.data = "Grades[" + i + "]";
def.render = renderGradeCell;
options.columnDefs.push( def );
}
$( '#gradebook-table' ).DataTable( options );
}
function renderGradeCell( data,type,row,meta )
{
if ( type === 'display' )
{
// I expect data to be an object containing grade properties.
return '<span>' + data.Value + '</span>';
}
return data;
}
</script>
当成绩列的数据源为"Grades[" + i + "]"
时,给定data
函数的renderGradeCell()
不是我期望的对象,而是类似于以下的字符串。对于整行数据,它仅重复"[object Object]0"
到与“成绩”数组中的项相同的数目。
"[object Object]0[object Object]0[object Object]0"
我将成绩列的数据源更改为"Grades[]"
。但是然后,给定data
函数的renderGradeCell()
是该行的整个成绩数组。
任何建议都值得赞赏。谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。