启用服务器过滤、排序、分页会中断 MVC Kendo UI 网格的 SignalR 客户端更新

Posted

技术标签:

【中文标题】启用服务器过滤、排序、分页会中断 MVC Kendo UI 网格的 SignalR 客户端更新【英文标题】:Enabling Server Filtering, Sorting, Paging breaks SignalR Client Updates for MVC Kendo UI Grid 【发布时间】:2014-12-28 06:49:10 【问题描述】:

我使用 Teleirk MVC 包装器为带有 SignalR 数据源的 Kendo UI 网格创建了一个应用程序。

网格的更新被传输并完美地反映在所有运行应用程序的客户端上(使用客户端过滤、排序、分页)。我使用的数据源相当大(这导致了过滤、排序、分页操作的一些性能问题)。因此,我重新配置了我的网格以使用服务器过滤、排序、分页,这确实解决了我的性能问题并大大提高了应用程序的可用性。

在我重新配置以在服务器端移动这些操作后,我注意到我所做的更改并未反映在所有客户端计算机上。然后,我在客户端和服务器端过滤、排序和分页之间来回切换,以确认该更改是导致我的问题的原因。

有没有人亲身经历过这种情况?您能否为我提供有关如何解决此问题的步骤/建议?

谢谢

【问题讨论】:

【参考方案1】:

Telerik 为我提供了解决方案。这是有答案的线程:

[http://www.telerik.com/forums/enabling-server-filtering-sorting-paging-breaks-signalr-client-updates-for-mvc-kendo-ui-grid#HsK5Fb_TqE-jnM98lZZrUQ][1]

如果您在 SignalR Hub 类中使用 DataSourceRequestDataSourceResult,则需要确保所有方法返回相同的类型:

        public DataSourceResult Read(DataSourceRequest request)
        
            var result = _dataService.Read().AsQueryable().ToDataSourceResult(request);
            return result;
        

        public void Update(ProductTitlePartsBySku item)
        
            _dataService.Update(item);
            Clients.Others.update(item);
        

在这种情况下,Clients.Others.update 调用返回项目 - 它应该是:

Clients.Others.update(new DataSourceResult

    Data = new[]  item 
);

您还必须确保在网格视图中设置 .Data 选项等:

    .Schema(schema => schema
        .Data("Data")
        .Total("Total")
        .Aggregates("Aggregates")
        .Model(model =>
        
            model.Id(m => m.IDCOLUMN);
            model.Field(m => m.IDCOLUMN).Editable(false);
        )
    )

这确保网格知道它必须绑定到 DataSourceResult 的 Data 属性

【讨论】:

但我没有看到解决方案更新如何尊重客户端特定的过滤器、排序和分页设置。即使该项目可能出现在第 2 页上,而客户端当前位于第 1 页,也会发送更新。知道如何解决这个问题吗?

以上是关于启用服务器过滤、排序、分页会中断 MVC Kendo UI 网格的 SignalR 客户端更新的主要内容,如果未能解决你的问题,请参考以下文章

坑,MySQL中 order by 与 limit 混用,分页会出现问题!

具有服务器端分页/排序的 DevExtreme 数据网格不适用于过滤

Laravel(三)分页排序和过滤

Grid.Mvc 过滤

jQuery Grid With ASP.Net MVC

使用 JDBC 滚动策略对表格数据进行分页会导致性能下降吗?