【问题标题】:Server Side Processing Dynamic Columns服务器端处理动态列
【发布时间】:2019-04-05 01:14:07
【问题描述】:

服务器端路径提供 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 分页,它返回总记录数和数据的页面长度。如果我可以在没有服务器端处理的情况下完成此操作,我也会很高兴。

【问题讨论】:

  • 好的,我已经加载了数据,但它没有正确执行。分页不工作。它被设置为仅记录数而不是总数。要显示的记录数为 25,总计数为 140。我按以下方式设置分页 iTotalRecords = 140, iTotalDisplayRecords = 140
  • 只有当我销毁表,用新列重新创建表,然后尝试使用服务器端处理重新初始化时,路径有问题。
  • 您是否浏览过this link,它显示了使用 MVC C# 进行的示例数据表服务器端处理?
  • 是的,我已经查看了该答案,但我认为它不适合我的需要。我的列从客户端更改为客户端,因此不是静态的。每个客户的数量和名称都不同。我还尝试通过提供 Jason 字符串通过列属性/属性将它们添加到初始化中,但这给了我一个错误。稍后我将不得不向另一位专家提供该错误。这项工作是我工作之外的工作,我在工作。

标签: c# datatables-1.10


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多