实现滚动加载功能的C#实现

在现代的Web应用程序中,性能优化是一个重要的议题。其中一种常见的优化技术是实现滚动加载功能,即当用户滚动页面时,动态地从服务器加载数据。这种技术可以显著提高用户体验,因为它减少了初次加载的数据量,并且只在需要时才加载更多数据。

Facebook是启发实现滚动加载功能的应用程序。当浏览Facebook时,惊讶地发现,每当滚动页面,页面就会从服务器动态地追加新数据。这激发了对在C#中实现相同功能的兴趣。尽管搜索了很多资料,但并没有找到任何关于如何在C#中实现这一功能的文章或博客。当然,有一些关于Java和PHP的文章。仔细阅读了这些文章,并开始用C#编写代码。当它成功工作时,认为应该分享它,所以在这里发布它。

代码实现

要实现滚动加载功能,需要很少的代码。一个从客户端调用的WebMethod,它返回在滚动时追加的内容,以及一个客户端函数(document.ready),将在这里绑定滚动事件以从服务器加载数据。让详细看看这些服务器端和客户端方法。

这个方法用于从数据库或任何来源获取数据,并根据用于追加数据的控件准备一个HTML字符串。这里只是添加了一个带有序列号的消息。

[WebMethod] public static string GetDataFromServer() { string resp = string.Empty; for (int i = 0; i <= 10; i++) { resp += "<p><span>" + counter++ + "</span> This content is dynamically appended " + "to the existing content on scrolling.</p>"; } return resp; }

如果想从数据库加载数据,可以按照以下方式修改方法:

[WebMethod] public static string GetDataFromServer() { DataSet ds = new DataSet(); // Set value of connection string here string strConnectionString = ""; // Insert your connection string value here SqlConnection con = new SqlConnection(strConnectionString); // Write the select command value as first parameter SqlCommand command = new SqlCommand("SELECT * FROM Person", con); SqlDataAdapter adp = new SqlDataAdapter(command); int retVal = adp.Fill(ds); string resp = string.Empty; for (int i = 1; i <= ds.Tables[0].Rows.Count; i++) { string strComment = string.Empty; if (ds.Tables != null) { if (ds.Tables[0] != null) { if (ds.Tables[0].Rows.Count > 0) { if (ds.Tables[0].Rows.Count >= i - 1) { if (ds.Tables[0].Rows[i - 1][0] != DBNull.Value) { strComment = ds.Tables[0].Rows[i - 1][0].ToString(); } } } } } resp += "<p><span>" + counter++ + "</span> " + strComment + "</p>"; } return resp; }

在客户端,使用了document.ready方法,在其中为div注册了滚动事件绑定。使用了两个div元素:mainDiv和wrapperDiv。为mainDiv注册了滚动事件,并将动态数据追加到wrapperDiv。

$(document).ready(function() { $contentLoadTriggered = false; $("#mainDiv").scroll(function() { if ($("#mainDiv").scrollTop() >= ($("#wrapperDiv").height() - $("#mainDiv").height()) && $contentLoadTriggered == false) { $contentLoadTriggered = true; $.ajax({ type: "POST", url: "LoadOnScroll.aspx/GetDataFromServer", data: "{}", contentType: "application/json; charset=utf-8", dataType: "json", async: true, cache: false, success: function(msg) { $("#wrapperDiv").append(msg.d); $contentLoadTriggered = false; }, error: function(x, e) { alert("The call to the server side failed. " + x.responseText); } }); } }); });

在这里,为了检查滚动条是否移动到了底部,使用了以下条件。

if ($("#mainDiv").scrollTop() >= ($("#wrapperDiv").height() - $("#mainDiv").height()) && $contentLoadTriggered == false)

这个条件将确定滚动条是否移动到了底部。如果它移动到了底部,动态数据将从服务器加载并追加到wrapperDiv。将数据追加到所需的div元素的客户端脚本是在异步调用成功时运行的脚本。

success: function(msg) { $("#wrapperDiv").append(msg.d); $contentLoadTriggered = false; }

会注意到,只有在用户滚动到底部时,请求才会发送到服务器。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485