下面是一个使用ASP.NET Core实现分页和筛选的示例代码:
Product
的模型类,包含Id
、Name
和Price
属性:public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
Startup.cs
文件的ConfigureServices
方法中注册数据库上下文和分页器:public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddMvc();
services.AddRazorPages();
services.AddScoped, ProductRepository>();
services.AddSingleton();
services.AddPaging(options =>
{
options.ViewName = "Bootstrap4";
options.HtmlIndicatorDown = " ";
options.HtmlIndicatorUp = " ";
options.HtmlIndicatorNeutral = " ";
});
}
ProductRepository
的数据访问类,实现IRepository
接口,用于获取产品数据:public class ProductRepository : IRepository
{
private readonly ApplicationDbContext _dbContext;
public ProductRepository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
public IEnumerable GetAll()
{
return _dbContext.Products.ToList();
}
}
ProductController
的控制器类,用于处理分页和筛选请求:public class ProductController : Controller
{
private readonly IRepository _productRepository;
public ProductController(IRepository productRepository)
{
_productRepository = productRepository;
}
public IActionResult Index(int page = 1, string sortBy = "Id", string search = "")
{
var products = _productRepository.GetAll();
if (!string.IsNullOrEmpty(search))
{
products = products.Where(p => p.Name.Contains(search));
}
switch (sortBy)
{
case "Name":
products = products.OrderBy(p => p.Name);
break;
case "Price":
products = products.OrderBy(p => p.Price);
break;
default:
products = products.OrderBy(p => p.Id);
break;
}
var pager = new Pager(products.Count(), page);
var viewModel = new ProductViewModel
{
Products = products.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize),
Pager = pager,
SortBy = sortBy,
Search = search
};
return View(viewModel);
}
}
ProductViewModel
的视图模型类,包含Products
、Pager
、SortBy
和Search
属性:public class ProductViewModel
{
public IEnumerable Products { get; set; }
public Pager Pager { get; set; }
public string SortBy { get; set; }
public string Search { get; set; }
}
Index.cshtml
的视图文件,用于显示产品列表和分页控件:@model ProductViewModel
@{
ViewData["Title"] = "Products";
}
Products
Id
Name
Price
@foreach (var product in Model.Products)
{
@product.Id
@product.Name
@product.Price
}
@Html.Pager(Model.Pager, new { sortBy = Model.SortBy, search =