简单ASP.NET无止境分页

简单ASP.NET无止境分页,asp.net,webforms,pagination,comments,cwac-endless,Asp.net,Webforms,Pagination,Comments,Cwac Endless,我希望为评论部分实现一些简单的无休止的分页,类似于Youtube评论,您可以单击底部的ShowMore,它会加载更多的评论,但会维护之前评论的状态 我想我可以在UpdatePanel中使用带有Ajax控件工具包的ListView和一点Jquery来完成这项工作,但只需要一些指导。我正在考虑显示返回的前4个项目并将它们数据绑定到我的ListView,ListView将被包装在一个带有“显示更多”按钮的UpdatePanel中,当单击按钮时,它将向数据源添加4个项目并重新绑定ListView,但这不

我希望为评论部分实现一些简单的无休止的分页,类似于Youtube评论,您可以单击底部的ShowMore,它会加载更多的评论,但会维护之前评论的状态

我想我可以在UpdatePanel中使用带有Ajax控件工具包的ListView和一点Jquery来完成这项工作,但只需要一些指导。我正在考虑显示返回的前4个项目并将它们数据绑定到我的ListView,ListView将被包装在一个带有“显示更多”按钮的UpdatePanel中,当单击按钮时,它将向数据源添加4个项目并重新绑定ListView,但这不会顺利地将4个注释添加到底部,相反,ListView部分将刷新以显示新的注释


有没有更顺畅/更好的方法?我正在使用Webforms。

老实说,我会避免使用整个web表单模型(包括
UpdatePanel
)。在这种情况下,它会增加很多开销和复杂性

将AJAX请求发送回处理程序(不管是什么,为此目的构建的ASPX页面、web方法、HttpHandler、MVC控制器等)并返回JSON。由于注释在结构上相当简单,因此根据需要插入/构建关联的标记应该不难

我用这种方法在ASP.NETWebForms应用程序中构建了一个无休止的评论系统,效果非常好。页面呈现为带有用户控件的普通ASPX。注释的用户控件只输出一点脚本

我使用向控制器的请求加载我的初始注释,当用户滚动时,我只需向控制器请求下一个数据块,直到控制器告诉我我已到达集合的末尾(您还可以添加一个上限,以便用户不会加载太多记录并使其浏览器崩溃)

例子
  • 使用
  • 在成功回调中,可以将传递给它的数据视为JavaScript对象
  • 循环遍历所有项并创建/附加DOM节点

var元素=$(“#注释”);//这是包含所有注释的节点
$.ajax({
类型:“POST”,
url:“ClientApi/Comments/_GetPaged”//此处理程序构建JSON
数据类型:“json”,
数据:{pageIndex:5},//此处输入值
cache:false,
成功:功能(数据){
对于(变量i=0;i
Hi,多亏了这一点,我可以使用JQuery post将其发送回ashx/aspx并返回数据,但对于以JSON形式返回的数据,我有点困惑,如何将其转换回在repeater/listview中创建的html表/行?您是否有一个示例,其中返回的数据从ashx/aspx.cs追加回html?谢谢如果您想知道如何从asp.net返回json,请查看@User101这篇文章-我添加了一个示例,Sai Puli发布的链接可能也会有所帮助。
var element = $("#comments"); // this is your node with all comments

$.ajax({
    type: "POST",
    url: "ClientApi/Comments/_GetPaged", // this handler builds JSON
    dataType: "json",
    data: { pageIndex: 5 }, // your input values here
    cache: false,
    success: function (data) {
        for (var i = 0; i < data.length; i++) {
            var comment = data[i];
            var itemElement = $("<div/>").appendTo(element);

            // do whatever you want here, just remember that user input 
            // should be sanitized somewhere during the process
            itemElement.html(comment.text);
        }
    }
});