ASP.NET MVC5 分页查询实现详解

0 下载量 19 浏览量 更新于2024-08-04 收藏 40KB DOCX 举报
ASP.NET MVC5 实现分页查询的示例代码 在ASP.NET MVC5中,处理大量数据时,为了提高用户体验并优化服务器性能,通常会采用分页查询的方法。本文将详细介绍如何在ASP.NET MVC5项目中实现分页查询,并提供相关示例代码。 首先,分页查询涉及三个关键参数:数据总量(dataCount)、每页显示的数据条数(pageDataCount)以及当前页码(pageNumber)。这些值用于确定从数据库中提取哪一部分数据。计算总页数(pageCount)可以通过数据总量除以每页显示的数据条数得到,但需要注意向上取整,确保包含所有完整页面。而起始行号(startLine)和结束行号(endLine)则根据当前页码和每页显示的数据条数计算得出。 ```csharp // 数据总量 int dataCount; // 每页显示的数据条数 int pageDataCount; int pageNumber; // 总页数 int pageCount = (int)Math.Ceiling(dataCount / (pageDataCount * 1.0)); int startLine = (pageNumber - 1) * PageDataCount + 1; int endLine = startLine + PageDataCount - 1; ``` 接下来,我们需要从数据库中获取数据。在示例中,使用了轻量级ORM框架Dapper进行数据库操作。Dapper是一个高效且易于使用的SQL查询库,它可以与任何ADO.NET兼容的数据库一起使用。下面是如何使用Dapper来获取数据总量和范围查询的代码: ```csharp // 创建数据库连接 protected IDbConnection CreateConnection() { IDbConnection dbConnection = new SqlConnection(ConnectionString); dbConnection.Open(); return dbConnection; } // 获取数据库中数据的总条数 public virtual int QueryDataCount(string tableName) { using (IDbConnection dbConnection = CreateConnection()) { var queryResult = dbConnection.Query<int>("select count(Id) from " + tableName); if (queryResult == null || !queryResult.Any()) { return 0; } return queryResult.First(); } } // 范围查询,返回指定范围内的数据 public virtual IEnumerable<T> RangeQuery<T>(string tableName, int startLine, int endLine) { if (string.IsNullOrEmpty(tableName)) { throw new ArgumentNullException("表名不得为空"); } // 在这里编写SQL语句,查询指定范围的数据 string sql = $"SELECT * FROM {tableName} WHERE Id BETWEEN @startLine AND @endLine"; using (IDbConnection dbConnection = CreateConnection()) { return dbConnection.Query<T>(sql, new { startLine, endLine }); } } ``` 在`RangeQuery<T>`方法中,我们构造了一个SQL查询语句,使用了`BETWEEN`操作符来选取位于起始行号和结束行号之间的数据。注意,这里的`T`是泛型参数,表示返回的数据类型,需要根据实际查询结果的结构进行定义。 在ASP.NET MVC5的控制器中,你可以调用这些方法,结合视图模型来传递分页数据给视图。控制器代码可能如下所示: ```csharp public ActionResult Index(int? page) { int pageSize = 10; // 每页显示10条数据 int currentPage = page ?? 1; // 获取数据总量 int totalCount = repository.QueryDataCount("YourTableName"); // 计算总页数 int totalPages = (int)Math.Ceiling(totalCount / (double)pageSize); // 获取当前页数据 var data = repository.RangeQuery<YourModel>("YourTableName", (currentPage - 1) * pageSize, pageSize); // 构建视图模型 YourViewModel viewModel = new YourViewModel { TotalCount = totalCount, TotalPages = totalPages, CurrentPage = currentPage, Data = data }; return View(viewModel); } ``` 最后,在视图中,可以使用这些数据来构建分页导航,让用户可以方便地浏览不同页码的数据。 通过以上步骤,你已经学会了如何在ASP.NET MVC5中使用Dapper实现分页查询。这只是一个基础示例,实际应用中可能还需要考虑其他因素,如错误处理、查询性能优化等。记得在开发过程中根据项目的具体需求进行调整和优化。