如何在数据表

时间:2016-11-21 13:23:01

标签: c# jquery json datatable deferred-rendering

我有一个数据表,我希望使用延迟渲染,我不知道是什么问题,我的控制器方法返回一个json对象数组。请参阅下面的代码。

**数据表设置**

加载页面时调用此方法。

        var $dtTable = $("#tblPlayer");
        $dtTable.dataTable({
            bFilter: false,
            pageLength: 10,
            paging: true,
            autoWidth: true,
            columns:
            [
                null,
                { "orderDataType": "dom-text", type: "string" },
                { "orderDataType": "dom-text", type: "string" },
                { "orderDataType": "dom-text-numeric" },
                { "orderDataType": "dom-text-numeric" },
                { "orderDataType": "dom-text-numeric" },
                { "orderDataType": "dom-text-numeric" },
                { "orderDataType": "dom-text-numeric" },
                null,
                null,
                null
            ],
            "ajax": "Player/GetSetPlayers",
            "deferRender": true
        });

控制器方法

    public object[] GetSetPlayers()
    {
        var players = GetPlayers();

        _players = new object[players.Count];

        for (var i = 0; i < players.Count; i++)
        {
            _players[i] = players[i];
        }
        return _players;
    }

GetSetPlayers()返回一个json对象数组,下面的结果是索引0和1将包含的示例。

响应

[  
   {  
      "product":25000,
      "rank":1,
      "dirty_money":25000,
      "id":"b4b41b18edbb49b9ae80be5e768b6b80",
      "name":"Dan",
      "ban_status":0,
      "edit":"<a href='/support/player_gamedata/b4b41b18edbb49b9ae80be5e768b6b80/game' class='btn'><i class='icon-folder-close'></i></a>",
      "credit":30,
      "clean_money":20000,
      "ban":"<a href='/support/ban_player/by_id/b4b41b18edbb49b9ae80be5e768b6b80/' class='btn'><i class='icon-remove'></i></a>",
      "supplies":25000
   },
   {  
      "product":25000,
      "rank":1,
      "dirty_money":25000,
      "id":"3cac6e366170458686021eaa77ac4d6d",
      "name":"Dan",
      "ban_status":0,
      "edit":"<a href='/support/player_gamedata/3cac6e366170458686021eaa77ac4d6d/game' class='btn'><i class='icon-folder-close'></i></a>",
      "credit":30,
      "clean_money":20000,
      "ban":"<a href='/support/ban_player/by_id/3cac6e366170458686021eaa77ac4d6d/' class='btn'><i class='icon-remove'></i></a>",
      "supplies":25000
   }
]

1 个答案:

答案 0 :(得分:0)

我认为您需要在每个列上指定一个“数据”属性,该属性需要从返回的数据中填充。否则,它不知道json对象上的哪个属性到达每列。如果您将数据定义为数组数组而不是对象数组,则不需要这样做。

此外,您没有指定不需要的“dataSrc”选项,但如果未设置,我相信它希望返回的JSON具有以下形式:

{
  data: [ {...}, {...} ]
}

因此,如果您可以添加对ajax请求的原始响应,将会很有帮助。

EDIT1:

好的,所以双重检查,是的,它确实想要一个对象数组分配给JSON对象上的“data”属性,所以你可以做这样的事情来解决这个问题而不必修改服务器上的任何东西。只需将您的ajax选项更改为:

"ajax": {
  "url": "Player/GetSetPlayers",
  "dataSrc": function ( json ) {
      // We need override the built in dataSrc function with one that will 
      // just return the object array instead of looking for a "data" 
      // attribute on the "json" object.  Note if you ever want to add 
      // serverside sorting/filtering/paging you will need to move your table 
      // data to an attribute within the JSON object.
      return json;
   }
}

一旦你完成上述两个修复,你可能会很好。