不能在 DataTable 上定义超过 9 个列

Posted

技术标签:

【中文标题】不能在 DataTable 上定义超过 9 个列【英文标题】:Can't define more than 9 colums on DataTable 【发布时间】:2018-03-03 23:34:59 【问题描述】:

向上编辑:我在另一个项目上尝试过。同样的问题,当我尝试将它与 10 个数据列一起使用时,它给出了同样的错误,https://datatables.net/manual/tech-notes/7。但是我的问题没有定义。现在我确信这与后端无关。此外,当我在一列上粘贴两个数据并将这 10 列降低到 9 列时,它仍然有效。它肯定是关于列号的。


我在我的项目中使用 Jquery DataTables。我的大多数表格的列数都很少,但今天我尝试了一个有 10 列的表格。经过长时间的研究和测试,我发现了一个奇怪的问题,当我定义超过 9 列时,它甚至不会触发获取数据的 JsonResult 操作,但是当我尝试从 DataTable 脚本中删除其中一个数据列时,它会正常启动.它不依赖于要删除的数据列。这都是关于列数的。超过 9 列意味着它不起作用。

我尝试使用“scrollX”选项并为列提供低宽度值。我找不到任何其他解决方案。

这是我的 DataTable 脚本的示例:

$(document).ready(function () 
    var table = $('#tblExample').DataTable(
        "scrollX": true,
        "ordering": false,
        "searching": false,
        "serverSide": true,
        "info": false,
        ajax: 
            "url": "/ExampleRoute/ExampleController/ExampleAction",
            "data": function (d) 
                d.tofind= $("#txtToFind").val()
            
        ,
        columns: [
         data: "Data1" , width:"%5" ,
         data: "Data2" , width:"%5" ,
         data: "Data3" , width:"%5",
         data: "Data4" , width:"%5",
         data: "Data5" , width:"%5",
         data: "Data6" , width:"%5",
         data: "Data7" , width:"%5",
         data: "Data8" , width:"%5",
         data: "Data9" , width:"%5",
         data: "Data10" , width:"%5",            
        ],
        fixedColumns: true,
        responsive: true
    );

);

这是我的表格 html 的示例

<table id="tblExample">
                <thead>
                    <tr>
                        <th class="example1">Data1Col</th>
                        <th class="example2">Data2Col</th>
                        <th class="example3">Data3Col</th>
                        <th class="example4">Data4Col</th>
                        <th class="example5">Data5Col</th>
                        <th class="example6">Data6Col</th>
                        <th class="example7">Data7Col</th>
                        <th class="example8">Data8Col</th>
                        <th class="example9">Data9Col</th>
                        <th class="example10">Data10Col</th>
                    </tr>
                </thead>
            </table>

这与我所说的控制器/动作无关。当我尝试使用 9 列时,它工作得很好,会触发 ExampleController/ExampleAction,但是当 9+ 数据列时,它甚至不会触发这个动作。此外,这与&lt;th&gt; 数字无关,我尝试了更多和更少的数据列,同样它仅在少于 10 列时才有效。有没有办法让我使用更多的数据列。

【问题讨论】:

不存在这样的限制,我认为问题出在其他方面 不可能,当我尝试使用 9、8、7 和更多更少的数据列时,一切正常。如果它正在触发动作,我可以说我的 JsonResult 可能是错误的,但它甚至不会像我所说的那样触发动作。有人说和宽度有关,当表格无法滚动时,会出现此错误,但我无法解决。 @ReadyFreddy 限制来自你的 ajax 数组行的返回,你可以展示一个更完整的例子,我在这里 codepen.io/anon/pen/YrGxqd 使用 Jquery、bootstrap、dataTable 正如我再说一遍,它不能返回任何 json,因为它不能触发动作。我在另一个项目上尝试过,现在我看到如果我尝试 10 列短数据它可以工作,但是当我尝试在表上显示 10 列长数据时,它会给出相同的错误。这绝对是关于样式、宽度或类似的东西。 【参考方案1】:

好的,我发现问题出在DataTable的ajax发送的请求字符串上。当您想向 DataTable 返回太多数据时,它会使您的查询字符串非常长,并阻止从 [HttpGet] 操作获取数据。如果您遇到此问题,则必须将表 ajax 类型更改为 POST,并且您必须将控制器中的操作定义为 [HttpPost]。

【讨论】:

【参考方案2】:

这是由于您的查询字符串长度正在增加。您必须在 web.config 中增加查询字符串的大小。它将解决问题。

<system.webServer>
<security>
<requestFiltering>
<requestLimits maxQueryString="32768"/>
</requestFiltering>
</security>
</system.webServer>

【讨论】:

【参考方案3】:

我用其他方式解决了,有两个修改: - [HttpPost] 关于控制器中的操作 - "type": "POST" 在 DataTable 中的 ajax 调用

【讨论】:

以上是关于不能在 DataTable 上定义超过 9 个列的主要内容,如果未能解决你的问题,请参考以下文章

过滤N个列以获取特定值

C#中两个数据表合并成一个表如何操作?

Hbase 列族

使用Linq查询DataTable某列数据

HBASE列族不能太多的真相 (一个table有几个列族就有几个 Store)

从 C# 中的 DataTable 中获取 Distinct Column 以及其他列值