fnDraw清除但不重新加载DataTable Datasrc MVC JSON Api

时间:2016-09-07 22:01:05

标签: json asp.net-mvc datatables asp.net-ajax

如何通过点击按钮或每分钟左右的定时器来刷新它?谢谢。

这是我点击“刷新”时的样子。它会清除数据,但不会重新加载。

enter image description here

这是View代码。

<h2>Fixtures</h2>

    <button id="Refresh" type="button">Refresh</button>

    <table id="fixtures" class="table table-bordered table-hover">
        <thead>
            <tr>
                <th>Fixture</th>
                <th>Market</th>
            </tr>
        </thead>
        <tbody></tbody>
    </table>

    @section scripts
{
        <script>
            $(document).ready(function () {
                $("#fixtures").DataTable({
                    ajax: {
                        url: "/api/fixtures",
                        dataSrc: ""
                    },
                    columns: [
                        {
                            data: "eventName",
                        },
                         {
                            data: "marketName"
                        }
                    ]
                });
                var oFixtureTable = $('#fixtures').dataTable();

                $("#Refresh").click(function (e) {
                    oFixtureTable.fnClearTable(0),
                    oFixtureTable.fnDraw();
                });
            });
        </script>
    }

编辑:只需将DataTable更改为下面建议的变量赋值,就会导致DataTable根本无法渲染(无论是否有任何额外的刷新编码)。

    <script>
            $(document).ready(function () {
                //$("#fixtures").DataTable({
                var FixtureTable = $("fixtures").DataTable({
                    ajax: {
                        url: "/api/fixtures",
                        dataSrc: ""
                    },

enter image description here

2 个答案:

答案 0 :(得分:1)

首先,匈牙利符号(fnFoooTableaBar)在从Datatables 1.9到1.10的过程中已经过时了。由于您有一些不使用该表示法的选项,我假设您使用的是1.10+。

您的代码无法正常工作的原因是您首先清除表格(销毁所有行),然后重绘表格。请注意,您没有重新加载数据,只需再次绘制表格。虽然可能有1.9版本的重新加载,但我会给你1.10+解决方案,这是你可能应该使用的。

要重新加载表格,只需致电TableName.ajax.reload()即可。请参阅文档here

要注意的另一个细节是,您正在初始化数据表,然后将其分配给变量,但您可以而且应该一步完成。而不是:

//Make sure you use the capital D, lowercase creates a table, uppercase returns an API object
$("fixtures").DataTable({
    //.......
});
var oFixtureTable = $("fixtures").dataTable();

你应该:

//Might as well get rid of the 'o' (though you don't have to)
var FixtureTable = $("fixtures").DataTable({
    //.......
});
//Don't need the other assignment now.

然后,您将刷新方法的内部更改为:

FixtureTable.ajax.reload();

答案 1 :(得分:1)

如果您只想要一个刷新按钮,则可以更轻松地使用下载构建器中的buttons选项。或者,如果您只想下载并将其作为单个文件包含,请使用例如https://cdn.datatables.net/buttons/1.2.2/js/dataTables.buttons.min.js

然后你可以使用:

var Fixturetable = $("#fixtures").DataTable({
        ajax: { 
           // ajax setup 
        },
        dom: 'Bfrtip',
        columns: [
            {
                // your columns
            }
        ],
        buttons: [
            {
                text: 'Refresh Table',
                action: function () {
                   Fixturetable.ajax.reload();
                }
            }
        ]
     });

另请参阅示例here以获取想法(其用于“重新加载时保留选择”,但显示如何使用按钮) - 文档here&amp; here