Разбитый на страницы список не работает с представлением с несколькими моделями

#asp.net #asp.net-mvc #entity-framework #asp.net-core #entity-framework-core

Вопрос:

Я использовал ссылку для создания ASP.NET Основное веб-приложение для помощи в поиске / сортировке / разбивке на страницы. У меня есть класс PaginatedList.cs, как предложено в ссылке, чтобы помочь с нумерацией страниц, например

 public class PaginatedList<T> : List<T>
{
    public int PageIndex { get; private set; }
    public int TotalPages { get; private set; }

    public PaginatedList(List<T> items, int count, int pageIndex, int pageSize)
    {
        PageIndex = pageIndex;
        TotalPages = (int)Math.Ceiling(count / (double)pageSize);

        this.AddRange(items);
    }

    public bool HasPreviousPage
    {
        get
        {
            return (PageIndex > 1);
    }}

    public bool HasNextPage
    {
        get
        {
            return (PageIndex < TotalPages);
    }}

    public static async Task<PaginatedList<T>> CreateAsync(IQueryable<T> source, int pageIndex, int pageSize)
    {
        var count = await source.CountAsync();
        var items = await source.Skip((pageIndex - 1) * pageSize).Take(pageSize).ToListAsync();
        return new PaginatedList<T>(items, count, pageIndex, pageSize);
    }
} 
 

У меня есть представление, в котором используется несколько моделей, поэтому создана модель коллекции, как показано ниже

 public class CustomerInventoryCollectionDataModel
{
    public Customer CustomerData { get; set; }
    public List<Inventory> Inventorys { get; set; }
}
 

Поэтому я хочу, чтобы нумерация страниц для таблиц инвентаризации отображалась в индексном представлении. Итак, как указано в ссылке, я использую PaginatedList в представлении, например

 @model PaginatedList<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>
</d1>

<table class="table">
<thead>...</thead>
<tbody>
    @foreach (var item in Model.Inventorys)
    {
 

Он выдает ошибку, когда я пытаюсь получить доступ к customerData и Inventorys в представлении, подобном приведенному выше
введите описание изображения здесь

'PaginatedList<CustomerInventoryCollectionDataModel>' does not contain a definition for 'Inventorys' and no accessible extension method 'Inventorys' accepting a first argument of type 'PaginatedList<CustomerInventoryCollectionDataModel>' could be found (are you missing a using directive or an assembly reference?)

PaginatedList<CustomerInventoryCollectionDataModel>' does not contain a definition for 'CustomerData' and no accessible extension method 'CustomerData' accepting a first argument of type 'PaginatedList<CustomerInventoryCollectionDataModel>' could be found (are you missing a using directive or an assembly reference?)

Как можно разбить таблицы инвентаризации на страницы, как предложено в ссылке

Комментарии:

1. ваша модель представляет собой коллекцию. PaginatedList не имеет свойства Inventorys. Элементы внутри вашей коллекции / модели обладают этим свойством. Перебирайте модель и используйте элемент. customerData.CustomerNumber

2. @lordvlad30 Я перешел по ссылке, чтобы создать его, и я очень новичок в разработке веб-приложений .. Можете ли вы помочь мне подсказать, нужно ли мне изменить класс PaginatedList ?

Ответ №1:

В вашем представлении вы определили PaginatedList как свою модель представления, и у нее нет никакого свойства с именем CustomerData или Inventorys .

вы можете изменить свой код следующим образом:

 public class CustomerInventoryCollectionDataModel
{
    public Customer CustomerData { get; set; }
    public PaginatedList<Inventory> Inventorys { get; set; }
}
 

и

 @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>
</d1>

<table class="table">
<thead>...</thead>
<tbody>
    @foreach (var item in Model.Inventorys)
    {