3

在 Telerik 演示站点上,我们可以看到如何实现某种功能的示例: “选中网格列中的所有复选框”。但就我而言,它有两个缺点:

  1. 它没有选中所有页面上的所有复选框。
  2. 它没有在不同的页面上保存复选框的状态。

有人知道如何解决这些问题吗?提前致谢。

4

3 回答 3

1

在网格中使用分页的主要原因之一是您不必从数据存储中检索所有数据并生成大量 HTML 来推送到客户端。

根据我的经验,大多数用户都知道“全选”复选框仅检查当前页面上的项目。我还没有看到一个网站,选中这样的复选框实际上会检查所有记录,即使是那些我看不到的记录。

如果您的操作会影响超过当前记录页面,我建议您添加一个按钮,清楚地指示该操作将影响所有记录,然后向您的数据层发送一个命令,该命令将执行该操作。这将表现得更好(您不必通过网络发送可能很长的 id 列表)并允许用户了解他们的行为的影响。

于 2012-07-12T17:07:55.673 回答
1

只要我知道没有内置功能可以这样做。当您在第一页选择记录并更改到第二页时,也会发生同样的问题,您会丢失之前选择的任何内容。

要实现该功能,您有 2 个选项(我在以前的项目中都使用过)

1)在每次检查时,对您的一个控制器进行 Ajax 调用,并将您选择的任何内容存储在会话变量中(如果您有很多记录,这可能效率低下) 2)创建一个 javascript 变量并将您的选择存储在那里,然后发送使用 json 变量或逗号分隔值字符串返回控制器

正如我所说,我已经使用了这两种方法,所以这取决于这是否适合你

希望能帮助到你

于 2012-07-12T16:49:37.027 回答
1

我无法对此进行测试,所以我不是 100% 确定,但是看看 Telerik 的示例,它没有持久化的一个原因是因为网格的每个“页面”都需要回发,并且在控制器操作结果方法中,它们是'没有为绑定到网格的项目传递模型(或视图模型),它们只是将该项目列表返回到视图,因此它永远不会“保存”哪些项目被检查/选择以及哪些那些不是。您应该能够通过将视图模型作为 HttpPost 操作结果方法的参数,然后在发布后将该列表传递回视图,以便它保留选择的项目而不是创建新项目来解决此问题。这不会解决不选择所有项目的问题,但它至少应该保留在整个页面中选择的那些。我认为它不适用于所有项目的原因是它只能选择当时实际显示的项目。您可能想要发布(或 ajax)来选择“所有”项目。

于 2012-07-12T16:31:12.183 回答