【问题标题】:If I need pagination support, should I use a ListView or a Repeater?如果我需要分页支持,我应该使用 ListView 还是 Repeater?
【发布时间】:2009-08-04 15:12:40
【问题描述】:

如果我需要分页支持,我应该使用 ListView 还是 Repeater?

我可以将 DataPager 控件与 ListView 一起使用,但不能与 Repeater 一起使用。

那么最好的选择是什么?为什么?

【问题讨论】:

    标签: c# .net asp.net


    【解决方案1】:

    自 .NET 1.1 以来,我还没有比较各种数据可视化控件的性能。但是,如果您计划在非常大的数据集上使用这些控件中的一个,那么就需要注意了。

    Repeater 具有最简单、最精简的功能,不会向您的标记添加任何您没有明确告知的内容。如果您将数据读取器作为其数据源提供给它,那么这可能是性能最高的组合(尽管最缺乏功能)。

    我想这并不能准确回答您的问题,但会引发更多问题。

    但是...是否值得努力创建自定义分页或使用列表视图/数据分页器组合的内置功能?有时,我认为定制是值得的。

    需要担心的一点是,DataPager 控件在页面之间导航时使用回发。

    IMO,回发是处理分页的糟糕方式。原因如下:

    1.) 用户无法在浏览器历史记录中使用后退和前进按钮在页面之间导航,而不会收到有关重新提交表单数据的烦人消息。

    2.) 搜索引擎无法单独索引每页结果,因为它们都使用相同的 URL。

    至少使用自定义解决方案,您可以通过对每个页面使用查询字符串来解决所有这些问题。

    我在回复this question 时谈到了其中一些相同的问题。

    【讨论】:

    • 感谢 DataPager 的提示。作为构建网络表单应用程序的新手,我认为寻呼机是使用的工具。我不会用 10 英尺长的杆子碰它,因为我知道它使用的是 javascript 而不是真正的链接。
    • @Keyo - 是的,这是很多内置 Web 窗体控件的不幸之处。显然,它们是可以避免的。但这是我后来切换到 ASP.NET MVC 的原因之一,所以我什至不想使用它们。
    【解决方案2】:

    imho ListView 通常更好,因为您可以更好地自定义它。

    【讨论】:

      【解决方案3】:

      您还可以使用 PagedDataSource 在中继器中进行分页

      【讨论】:

      • 是的,但如果我需要更高级的寻呼机,例如在下一个和上一个按钮之间显示分页的寻呼机。不使用带有 DataPagerControl 的 ListView 会不会是一种编程开销?
      • 我不能说我已经使用了 ListView 控件并查看了我所看到的示例,它似乎基本上完成了我过去使用中继器所做的事情并自己实现了分页,但是显然代码开销更少。看起来如果你有 ListView(即 ASP.NET 3.5+),使用它,否则使用中继器。
      【解决方案4】:

      【讨论】:

        【解决方案5】:

        您可以成功使用 ListView 或 Repeater - 我认为重要的问题是您将如何实现分页?您的来源中有多少条信息记录?

        将 DataPager 放到 ListView 上会非常容易,设置几个属性并进行分页...每个页面实际上都查询 所有您的记录,其中大部分得到由 DataPager 抛出。这在很多情况下可能都很好,但如果您有很多记录,则可能不适合。

        DataPager 确实支持自定义分页 (see this),您可以在其中自己完成繁琐的工作(将 SQL 语句/存储过程设置为实际上一次只返回一个“页面”结果),但它是一些工作 。在这一点上,将它与中继器一起使用并不复杂,除了您必须在中继器上呈现/计算自己的分页控件/链接。

        我不太熟悉的PagedDataSource,但我不相信你可以实现自定义分页,所以它可能就像默认的DataPager(只是它也可以与DataReader一起使用)。

        总而言之,ListView 或Repeater 都可以工作,而且非常相似。带有默认 DataPager 的 ListView 将与带有 PagedDataSource 的 Repeater 相媲美,而带有自定义分页 DataPager 的 ListView 将与带有滚动您自己的分页代码的 Repeater 相媲美。

        【讨论】:

          【解决方案6】:

          ListView 被设计为Repeater 的.Net 3.5 替代品。如果您正在编写新代码,请使用 ListView。

          C# 中的 Apress Pro ASP.Net 书稍微涉及到了这一点。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-10-08
            • 1970-01-01
            • 2010-09-18
            • 2016-06-09
            • 2012-06-08
            • 2021-05-26
            相关资源
            最近更新 更多