在ASP.NET MVC5中实现分页查询是一个常见的需求,尤其是在处理大量数据时,本文将详细介绍如何在ASP.NET MVC5中实现分页查询,包括后端代码和前端视图的实现。

### 1. 创建模型
我们需要创建一个模型来表示我们的数据,假设我们有一个简单的`Product`模型:
```csharp
public class Product
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
```
### 2. 创建数据库上下文
我们需要创建一个数据库上下文类,以便与数据库进行交互,这里我们使用Entity Framework Code First:
```csharp
public class ApplicationDbContext : DbContext
public DbSet
public ApplicationDbContext() : base("DefaultConnection")
{
}
```
### 3. 创建控制器
在控制器中,我们将实现分页逻辑,以下是一个简单的控制器示例:
```csharp
public class ProductsController : Controller
private ApplicationDbContext db = new ApplicationDbContext();
public ActionResult Index(int? page)
{
const int pageSize = 10; // 每页显示的记录数
int currentPageIndex = page ?? 1; // 当前页码,默认为1
var products = db.Products.OrderBy(p => p.Id).ToPagedList(currentPageIndex, pageSize);
ViewBag.TotalPages = Math.Ceiling((double)db.Products.Count() / pageSize);
ViewBag.CurrentPage = currentPageIndex;
return View(products);
}
```
在上面的代码中,我们使用了`ToPagedList`方法来实现分页,这个方法不是ASP.NET MVC自带的,需要安装一个名为`PagedList.Mvc`的NuGet包,你可以通过以下命令安装它:
```shell

Install-Package PagedList.Mvc
```
### 4. 创建视图
我们需要创建一个视图来显示分页结果,在`Views/Products/Index.cshtml`中添加以下代码:
```html
@model IPagedList
@using PagedList.Mvc;
Product List
| ID | Name | Price |
|---|---|---|
| @item.Id | @item.Name | @item.Price |
@Html.PagedListPager(Model, page => Url.Action("Index", new { page }))
```
在这个视图中,我们使用了`PagedListPager`辅助方法来生成分页控件,这个控件会自动生成上一页、下一页以及页码链接。
### 5. 配置路由
确保你的路由配置允许分页参数,默认的路由配置已经足够:
```csharp
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
```
### 6. 测试分页功能
你可以运行你的应用程序并访问`/Products` URL来查看分页效果,你应该能够看到产品列表,并且可以使用分页控件在不同的页面之间导航。
### 7. 问题解答
#### 问题1:如何在分页查询中使用过滤条件?
你可以在分页查询中添加过滤条件,如果你想根据产品名称进行过滤,可以修改控制器中的查询:
```csharp
public ActionResult Index(int? page, string searchString)
const int pageSize = 10; // 每页显示的记录数
int currentPageIndex = page ?? 1; // 当前页码,默认为1
var products = db.Products.Where(p => p.Name.Contains(searchString ?? "")).OrderBy(p => p.Id).ToPagedList(currentPageIndex, pageSize);
ViewBag.TotalPages = Math.Ceiling((double)db.Products.Count() / pageSize);
ViewBag.CurrentPage = currentPageIndex;

return View(products);
```
然后在视图中添加一个搜索框:
```html
@using (Html.BeginForm("Index", "Products", FormMethod.Get))
```
#### 问题2:如何自定义分页控件的样式?
你可以通过CSS来自定义分页控件的样式,你可以在`Site.css`文件中添加以下样式:
```css
.pagination {
display: flex;
justify-content: center;
list-style: none;
padding: 0;
.pagination li {
margin: 0 5px;
.pagination a {
text-decoration: none;
color: #007bff;
padding: 8px 16px;
border: 1px solid #ddd;
border-radius: 4px;
.pagination a:hover {
background-color: #f0f0f0;
```
然后在视图中应用这些样式:
```html
@Html.PagedListPager(Model, page => Url.Action("Index", new { page, searchString = Request["searchString"] }), new PagedListRenderOptions { ClassName = "pagination" })
```
通过以上步骤,你可以在ASP.NET MVC5中实现分页查询,并根据需要进行自定义和扩展。
小伙伴们,上文介绍了“ASP.NET MVC5 实现分页查询的示例代码”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。