2

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

DataTables 警告(表 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()

});

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

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>
4

6 回答 6

5

这也让我发疯了,所以我想我会添加对我有用的解决方案。

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

bRetrieve: true 

SUVASH 的博客解释说:

还有另一种情况,假设您发送多个 ajax 请求,哪个响应将访问同一模板中的同一个表,那么我们也会收到错误。在这种情况下,fnDestroy 方法无法正常工作,因为您不知道哪个响应先出现或者以后。然后你必须在数据表配置中设置bRetrieve TRUE。就是这样。

于 2014-09-24T11:34:12.503 回答
3

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

该错误意味着您正在尝试将表设为 Datatable,而实际上它已经是 Datatable。

您将不得不在这里重新考虑您的设计。

为什么要在 PreRender 中注册 StartupScript?

尝试删除两者之一,DatatablesExec()您的问题应该消失!

于 2013-08-28T14:22:43.283 回答
1

大家好,我只是想在这种情况下添加一些东西,我也体验过它并且也在寻找这个问题的解决方案,但现在我找到了答案而不是使用 bDestroy 如果你已经使用了我的情况,请始终检查你的数据表的引用 ID这个

$('#dtAddParticipantList').dataTable 

你的另一张桌子也用这个

$('#dtAddParticipantList').dataTable 

把它改成不同的东西

var oTable = $('#dtParticipantList').dataTable({ 
 //some code stuffs
});
于 2014-05-16T05:52:35.740 回答
1

我也遇到过这个问题,我阅读了有关解决此问题的不同主题,但没有运气。但最后我已经在 jquery 窗口加载方法中初始化了数据表

$(window).load(function(){
$("#example").DataTable();
}); 

而不是 jquery 的文档就绪方法

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

奇迹发生了:) .. 希望对你有帮助。谢谢

于 2014-05-10T10:19:57.550 回答
0

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

于 2021-02-19T12:55:49.173 回答
0

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

$('#dataTable').dataTable({
  destory: true,
  ...
});
于 2017-08-20T23:45:10.540 回答