首页 > 解决方案 > 服务器端处理动态列

问题描述

服务器端路径提供 404 错误,其中路径与初始加载表时使用的路径相同。表被破坏,列被动态改变。

我成功地应用了我有静态列的服务器端处理。我以前在没有服务器端处理的情况下动态构建了表,但现在负载太大而无法处理。因此,我已经使用服务器端处理配置转移到 SQL 分页,但它不会加载表,即使路径与我最初加载表时的路径相同,但只有一个静态列。我使用的是 1.10.15 版本,因为我使用该库已有多长时间,而且我担心如果我升级许多表将不再工作。不确定升级是否也能解决问题。

JQuery 数据表代码

var oTable = $("#InvoiceProcessing").DataTable({
                jQueryUI: true,
                pagingType: "full_numbers",
                responsive: true,
                "scrollX": true,
                "bServerSide": true,
                "sAjaxSource": "@Url.Action("GetInvoiceProcessing", "InvoiceProcessing")?clientId=" + cId + "&summaryDate=" + sumDate + "&processedDate=" + procDate + "&accountNumber=&invoiceNumber=",
                "bProcessing": true,
                "destroy": true,
                lengthMenu: [[25, 50, 100], [25, 50, 100]],
                "autoWidth": true
            });

C# 方法签名 - 此方法不会被命中

public async Task<ActionResult> GetInvoiceProcessing(Guid? clientId, DateTime? summaryDate, DateTime? processedDate, DataTableParamModel param, string accountNumber = "", string invoiceNumber = "")

我需要让分页反映查询的完整大小。我正在使用 sql 分页,它返回总记录数和数据的页面长度。如果我可以在没有服务器端处理的情况下完成此操作,我也会对此感到满意。

标签: c#datatables-1.10

解决方案


我能够使用 Priyank Panchal 提供的信息,但修改了建议中的解决方案以满足我的需求。

我无法按原样使用它,因为我为网格生成的列是由数据动态驱动的,因此在加载之前无法预定义。

为此,我必须以三种不同的方式加载网格。

  1. 首先,我仅使用一个字段来加载它,该字段使用 Datatables 默认消息“无可用记录”来标识它的使用情况。
  2. 第二次加载在选择客户端后重新创建网格,这决定了所需的字段,并以正确的结构重新加载。
  3. 最后,我使用用户定义数据过滤方式的另一个选择重新加载网格。

有了这个,还需要隐藏第一列,我通过 Datatables 配置的“columnDefs”属性来做到这一点。

最后一个要求是为编辑和删除按钮提供附加字段。

这是通过“columnDefs”属性以及以下列方式引用表来完成的:“aTargets”:[oTable.columns()[0].length - 2]。这提供了将它首先添加到最后一列并在其后添加另一个的能力。


推荐阅读