You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core多模型视图下PaginatedList分页功能失效如何解决

报错原因

你当前的用法存在类型不匹配问题:PaginatedList<T>本身是继承自List<T>的泛型集合类,相当于自带分页参数的列表。你将视图模型指定为PaginatedList<CustomerInventoryCollectionDataModel>,意味着整个Model是多个组合模型对象组成的列表,列表本身自然没有单个组合模型里的CustomerData和Inventorys属性,因此触发了属性找不到的报错。

同时你的需求是仅对Inventorys集合做分页,不需要对整个组合模型做分页,因此正确的做法是将分页对象放到组合模型内部。


改造步骤

1. 调整组合模型定义

把原来的List<Inventory>替换为PaginatedList<Inventory>,专门承载分页后的库存数据,保留单个客户数据字段:

public class CustomerInventoryCollectionDataModel
{
    public Customer CustomerData { get; set; }
    // 用PaginatedList替代List,承载分页后的库存数据和分页参数
    public PaginatedList<Inventory> PaginatedInventories { get; set; }
}

2. 控制器端组装视图模型

先查询单个客户数据,再针对Inventory数据源调用CreateAsync方法生成分页结果,最后组装为组合模型传给视图:

public async Task<IActionResult> Index(int pageIndex = 1, int pageSize = 10)
{
    // 替换为你实际的客户查询逻辑
    var customer = await _context.Customers.FirstOrDefaultAsync(c => c.Id == 你的客户ID);
    // 构建Inventory的查询源,可根据需求加筛选、排序条件
    var inventoryQuery = _context.Inventories.Where(i => i.CustomerId == 你的客户ID).AsNoTracking();
    // 生成分页后的Inventory集合
    var paginatedInventories = await PaginatedList<Inventory>.CreateAsync(inventoryQuery, pageIndex, pageSize);
    // 组装组合模型
    var viewModel = new CustomerInventoryCollectionDataModel
    {
        CustomerData = customer,
        PaginatedInventories = paginatedInventories
    };
    return View(viewModel);
}

3. 调整视图绑定逻辑

视图直接绑定组合模型,不需要外层套PaginatedList,分页相关参数从PaginatedInventories属性获取即可:

@model JAXApp.Models.CustomerInventoryCollectionDataModel

<div>
<h4>Customer</h4>
<hr />
<dl class="row">
    <dt class="col-sm-2">
        Customer Number
    </dt>
    <dd class="col-sm-10">
        @Html.DisplayFor(model => model.CustomerData.CustomerNumber)
    </dd>
</dl>

<table class="table">
<thead>...</thead>
<tbody>
    @foreach (var item in Model.PaginatedInventories)
    {
        <!-- 渲染单条Inventory数据 -->
    }
</tbody>
</table>

<!-- 分页控件,和官方文档用法一致,仅从PaginatedInventories属性取参数 -->
<a asp-action="Index" 
   asp-route-pageIndex="@(Model.PaginatedInventories.HasPreviousPage ? Model.PaginatedInventories.PageIndex - 1 : 1)"
   class="btn btn-primary @(Model.PaginatedInventories.HasPreviousPage ? "" : "disabled")">
    上一页
</a>
<span>第 @Model.PaginatedInventories.PageIndex 页 / 共 @Model.PaginatedInventories.TotalPages 页</span>
<a asp-action="Index" 
   asp-route-pageIndex="@(Model.PaginatedInventories.HasNextPage ? Model.PaginatedInventories.PageIndex + 1 : Model.PaginatedInventories.TotalPages)"
   class="btn btn-primary @(Model.PaginatedInventories.HasNextPage ? "" : "disabled")">
    下一页
</a>

内容的提问来源于stack exchange,提问作者trx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:24:03