Как написать код для разбиения на страницы на стороне сервера в ASP.NET Core - PullRequest
0 голосов
/ 21 октября 2019

Я хочу реализовать разбиение на страницы на стороне сервера для загрузки некоторых данных, которые я хочу загрузить в браузер. Он отлично работает на стороне клиента с PageList в MVC, но я не знаю, как это сделать на стороне Asp.net Core Server.

Это мой класс. Я хочу показать все пропорции, даже фотографию (изображение)

public class HouseDTO
    {
        [Key]
        public int HouseId { get; set; }
        public Nullable<decimal> Price { get; set; }
        public string LiveArea { get; set; }
        public string RoomAmount { get; set; }
        public string HouseType { get; set; }
        public string ImageName { get; set; }
    } 

А потом мой репозиторий

public interface IHouseRepository
{

  public IEnumerable<HouseDTO> GetAllHouses()

}

 public class HouseRepository : IHouseRepository
 {

    private ApplicationDbContext db;

    public HouseRepository(ApplicationDbContext db)
    {
            this.db = db;
    }

    public IEnumerable<HouseDTO> GetAllHouses()
    {
            return db.Houses;
    }
}

А это мой контроллер

public class AdvController : Controller
{

   private IHouseRepository db;
   private IHostingEnvironment hostingEnvirnment;

   public AdvController(IHouseRepository db, IHostingEnvironment hostingEnvirnment)
   {
      this.db = db;
      this.hostingEnvirnment = hostingEnvirnment;

   }

   public IActionResult Index()
   {
     var model = db.GetAllHouses();  // How can I do this to Server side pagination?
     return View(model);
   } 
}

Итак, как можно создать пагинацию на стороне сервера для этого действия?

public IActionResult Index()
{
   var model = db.GetAllHouses();   
   return View(model);
}

Буду очень признателен, если вы мне поможете.

Ответы [ 2 ]

2 голосов
/ 21 октября 2019

Вы можете использовать Skip () и Take (). Создайте метод репозитория, который займет текущую позицию (чтобы пропустить) и передаст параметр Take. Что-то вроде:

public House GetPaged(currentPosition)
{
  return db.Houses.Skip(currentPosition).Take(20);
}
1 голос
/ 21 октября 2019

Take () и Пропустить () по результатам db. Дома - это путь.

Как это:

// Skip (n) pages and take (x) elements from required page.
return db.Houses.Skip(page*countPerPage).Take(countPerPage);
// As suggested in comments for the answer above, specified code should belong to 
// repository method. Initially implemented as a template to be copypasted 
// and reused according to your needs.

убедитесь, что нумерация страниц в запросе основана на 0: page = 0, если страница не указана;page = 0, если вам требуется страница # 1;page = 1, если вам нужна страница # 2 и т. д. И значение countPerPage очевидно:)

...