将分页添加到 asp.net MVC 中的部分视图

本文关键字:视图 MVC net 分页 添加 asp | 更新日期: 2023-09-27 18:34:05

我正在尝试向我的partialview添加分页

这就是模型类退出的方式

public class DashboardViewModel
{
    public List<ProductTableViewModel> ProductTable;
}
public class ProductTableViewModel
{       
    public string Product_ID { get; set; }     
    public string Product_Title { get; set; }
    public IEnumerable<ProductTableViewModel> Items { get; set; }
    public PaginationModel.Pager Pager { get; set; }
    public int PageSize { get; set; }
    public int PageCount { get; set; }
    public int CurrentPageIndex { get; set; }
}

这是控制器方法

    public ActionResult ProductsTablePartial(int? page)
    {
        var allproducts = ..
        var pager = new PaginationModel.Pager(allproducts.Count(), page);
        var viewModel = new ProductTableViewModel
        {
            Items = allproducts.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize),
            Pager = pager
        };
        return PartialView("ProductsTablePartial", viewModel);
    }

这是主视图页面

@model project_name.Models.DashboardViewModel
@{
}
<div>
    @Html.Action("ProductsTablePartial", "Home")
</div>

这是带有分页控件的部分视图

@model IEnumerable< project_name.Models.ProductTableViewModel>
<fieldset>    
    <table class="table">
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.Product_ID)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Product_Title)
            </th>
        </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.Product_ID)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.Product_Title)
                </td>               
            </tr>
        }
    </table>
    <!-- pager -->
                <div class="col-md-10">
                    <!-- pager -->
                    @if (Model.Pager.EndPage > 1)
                    {
                        <ul class="pagination">
                        @if (Model.Pager.CurrentPage > 1)
                        {
                                <li>
                                    <a>First</a>
                                </li>
                                <li>
                                    <a>Previous</a>
                                </li>
                            }
                        @for (var page = Model.Pager.StartPage; page <= Model.Pager.EndPage; page++)
                        {
                                <li class="@(page == Model.Pager.CurrentPage ? "active" : "")">
                                    <a>@page</a>
                                </li>
                            }
                        @if (Model.Pager.CurrentPage < Model.Pager.TotalPages)
                        {
                                <li>
                                    <a>Next</a>
                                </li>
                                <li>
                                    <a>Last</a>
                                </li>
                         }
                        </ul>
                    }
                </div>  

</fieldset>

此代码没有任何编译时错误,但一旦在运行时出现错误

我收到以下异常

IEnumerable<ProductTableViewModel>不包含 "寻呼机"和没有扩展方法"寻呼机"接受第一个参数 类型 IEnumerable<ProductTableViewModel>

将分页添加到 asp.net MVC 中的部分视图

要传递给分部视图的视图模型的类型为 ProductTableViewModel 而不是 IEnumerable<ProductTableViewModel> 。因此,请确保相应地调整部分:

@model project_name.Models.ProductTableViewModel

然后遍历模型的 Items 属性,而不是模型本身:

@foreach (var item in Model.Items)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Product_ID)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.Product_Title)
        </td>               
    </tr>
}