DataTables警告(table id ='IDTableName'):无法重新初始化DataTable

时间:2013-08-28 13:42:19

标签: jquery datatables

我在ASP.NET中使用Jquery Datatable,以及UpdatePanel(scriptManager)。 我有下面的错误:

  

DataTables警告(table id ='tbVerificationApplicant'):不能   重新初始化DataTable。

     

要检索此表的Datatables对象,请不传递参数或   请参阅bRetrieve和bDestroy的文档

这是用于创建表的Jquery文件:

function DatatablesExec() { 
        $('#tbVerificationApplicant').dataTable({
            'bProcessing': true,
            'bServerSide': true,
            "sPaginationType": "full_numbers",
            'sAjaxSource': 'listVerificationData.ashx?ddlStatusValue=' + $("#ddlStatusClient option:selected").text(),
            "fnDrawCallback": function () {
                $('#tbVerificationApplicant tbody tr').click(function () {
                    var hRef = $("td:eq(0)", this).text();
                    document.location.href = 'frm_VerifyIdentity.aspx?ID=' + hRef;
                });
            }
    });
}

$(document).ready(function () {
    /* Initialise the DataTable */

        DatatablesExec()

});

但是,为了避免在我更改下拉列表后表格消失,我在网络表单中的代码中添加了下面的代码。

protected void Page_Prerender(object sender, EventArgs e)
{
    {
        ScriptManager.RegisterStartupScript(this, this.GetType(), "_function_dummyname", "<script type='text/javascript'>DatatablesExec();</script>", false);
    }
}

它运行良好,但在开始时出现这个错误。

这是网络表单的一部分:

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="ddlStatusClient" EventName="SelectedIndexChanged" />
    </Triggers>
    <ContentTemplate>
        <table id="tbVerificationApplicant" class="display">
                <thead>

6 个答案:

答案 0 :(得分:5)

这也让我疯了,所以我想我会添加适合我的解决方案。

如果您要发送任何响应表格某些元素的Ajax请求,则在您的表格配置中,您需要设置

bRetrieve: true 

SUVASH'S BLOG explains:

  

还有另一种情况,比如你发送了多个ajax请求   哪个响应将访问相同模板中的同一个表,然后我们将   也得到错误。在这种情况下,fnDestroy方法无法正常工作   因为你不知道哪个响应是第一个或更晚的。然后你   必须在数据表配置中设置bRetrieve TRUE。就是这样。

答案 1 :(得分:3)

当您的网页加载时,您的功能DatatablesExec()会执行两次:一次在代码隐藏Page_Prerender中,一次在$(document).ready函数中。

错误意味着您正在尝试使表格成为数据表,而它实际上已经是数据表。

你必须在这里重新考虑你的设计。

为什么PreRender中的RegisterStartupScript是必要的?

尝试删除其中一个DatatablesExec(),您的问题应该消失!

答案 2 :(得分:1)

我也遇到过这个问题,我读到了解决这个问题的不同主题,但没有运气。 但最后我在jquery窗口加载方法

中初始化了数据表
$(window).load(function(){
$("#example").DataTable();
}); 

而不是jquery的文档就绪方法

$(document).ready(function(){
$("#example").DataTable();
});

和奇迹发生:) .. 希望它能帮到你。谢谢

答案 3 :(得分:1)

大家好我只是想在这种情况下添加一些内容,我也体验过它并且还搜索了这个问题的解决方案但是现在我找到答案而不是使用bDestroy总是在我的情况下检查你的数据表的引用id如果你已经使用了这个

$('#dtAddParticipantList').dataTable 

并且您的其他表也使用此

$('#dtAddParticipantList').dataTable 

将其更改为不同的

var oTable = $('#dtParticipantList').dataTable({ 
 //some code stuffs
});

答案 4 :(得分:0)

尝试将destory: true添加到您的dataTable配置中:

$('#dataTable').dataTable({
  destory: true,
  ...
});

答案 5 :(得分:0)

<块引用>

$('#example').dataTable().fnClearTable();
$('#example').dataTable().fnDestroy();