#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)
{