环境:
win10, .NET 6.0
问题描述
假设我数据库中有N个表,当我打开某页面时,每个表都先加载一部分(比如20条),点击表下某个按钮,再加载下一部分,如此循环直至加载完毕。
解决方案
基础版
数据库查询部分(Entity Framework)
BasicPartsDbContext.cs
using System.Data.Entity; namespace WebApplication1.Models { public class BasicPartsDbContext:DbContext { public BasicPartsDbContext() : base("name=conn1") { } public DbSet<BasicParts> BasicParts { get; set; } } }
其中BasicParts
是我的实体/模型类,数据类型与数据库中某个表一一对应,内容大概如下:
using System.ComponentModel.DataAnnotations.Schema; namespace WebApplication1.Models { [Table("dbo.表名")] public class BasicParts { // 对应列 } }
而"name=conn1"
是指使用此数据库配置。该配置在项目根目录下的Web.config中:
2. BasicPartsRepository.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace WebApplication1.Models { public class BasicPartsRepository { private BasicPartsDbContext _context; public BasicPartsRepository(BasicPartsDbContext context) { _context = context; } public List<BasicParts> GetPagedData(int pageIndex, int pageSize) { return _context.BasicParts.OrderBy(i => i.id) .Skip(pageIndex * pageSize) .Take(pageSize) .ToList(); } } }
控制器
public class HomeController : Controller { private BasicPartsRepository _basicPartsRepository; ... public ActionResult BasicPartsView() { return View(); } [HttpGet] public JsonResult LoadMoreBasicParts(int pageIndex, int pageSize) { var data = _basicPartsRepository.GetPagedData(pageIndex, pageSize); return Json(data, JsonRequestBehavior.AllowGet); } ... }
前端页面
<!DOCTYPE html> <html> <head> <title>Load More Data Example</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <div id="data-container"> <!-- 这里将显示从服务器加载的数据 --> </div> <button id="load-more">加载更多</button> <script> var pageIndex = 0; var pageSize = 20; function loadMoreData() { $.ajax({ url: '/Home/LoadMoreBasicParts', data: { pageIndex: pageIndex, pageSize: pageSize }, success: function (data) { pageIndex++; // 将新加载的数据追加到页面上 data.forEach(function (item) { $('#data-container').append('<p>' + item.name + '</p>'); }); } }); } $(document).ready(function () { $('#load-more').on('click', function () { loadMoreData(); }); // 页面加载完成时,加载初始数据 loadMoreData(); }); </script> </body> </html>
加载到表格版
其他部分保持不变,只修改前端:
<!DOCTYPE html> <html> <head> <title>Load More Data into Table</title> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> </head> <body> <table id="data-table" border="1"> <thead> <tr> <th>No.</th> <th>名称</th> <th>序列</th> <th>描述</th> <th>类型</th> </tr> </thead> <tbody> <!-- 这里是数据行 --> </tbody> </table> <button id="load-more">加载更多</button> <script> var pageIndex = 0; var pageSize = 20; function loadMoreData() { $.ajax({ url: '/Home/LoadMoreBasicParts', data: { pageIndex: pageIndex, pageSize: pageSize }, success: function (data) { pageIndex++; // 将新加载的数据追加到表格中 data.forEach(function (item) { $('#data-table tbody').append( '<tr>' + '<td>' + item.id + '</td>' + '<td>' + item.name + '</td>' + '<td>' + item.seq + '</td>' + '<td>' + item.info + '</td>' + '<td>' + item.stype + '</td>' + '</tr>' ); }); } }); } $(document).ready(function () { $('#load-more').on('click', function () { loadMoreData(); }); // 页面加载完成时,加载初始数据 loadMoreData(); }); </script> </body> </html>