using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using Domain.Entities; using Domain.Repositories; using FilmsRUsOnline.Models; namespace FilmsRUsOnline.Controllers { public class FilmsController : Controller { // The controller needs a films repository to access films. private IFilmsRepository filmsRepository; // Number of films to display on each page. public int PageSize = 3; // Constructor - approach #1, creates a repository manually. public FilmsController() { // Either use the dummy repository... filmsRepository = new DummyFilmsRepository(); // Or use the database-connected repository. // string connStr = @"Server=.\SQLEXPRESS;Database=FilmsRUs;Trusted_Connection=yes;"; // filmsRepository = new SqlFilmsRepository(connStr); } // Constructor - approach #2, gets given a repository by Dependency Injection (DI). public FilmsController(IFilmsRepository filmsRepository) { this.filmsRepository = filmsRepository; } // Action method to list films (simple implementation). /* public ViewResult List() { return View(filmsRepository.Films); } */ // Action method to list a page of films (page-by-page). // Note the default value for the pageNumber - this is a C# 4 language feature. // If you're using C# 3.x, do this instead: [DefaultValue(1)]int pageNumber public ViewResult List(int pageNumber = 1) { var filmsToShow = filmsRepository.Films; FilmsViewModel vm = new FilmsViewModel() { Films = filmsToShow.Skip((pageNumber - 1) * PageSize) .Take(PageSize) .ToList(), PaginationInfo = new PaginationInfo { CurrPage = pageNumber, ItemsPerPage = PageSize, NumItems = filmsToShow.Count() } }; return View(vm); } } }