From f5c33c367a4c7b834d7c684c008180a35af071bc Mon Sep 17 00:00:00 2001 From: Michael Date: Thu, 20 Apr 2017 09:20:05 -0400 Subject: paginate forum posts --- Project-Unite/Controllers/ForumController.cs | 29 +++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'Project-Unite/Controllers/ForumController.cs') diff --git a/Project-Unite/Controllers/ForumController.cs b/Project-Unite/Controllers/ForumController.cs index b65ed3e..5b36f20 100644 --- a/Project-Unite/Controllers/ForumController.cs +++ b/Project-Unite/Controllers/ForumController.cs @@ -318,9 +318,13 @@ namespace Project_Unite.Controllers return RedirectToAction("ViewUnread"); } + + [Authorize] - public ActionResult ViewTopic(string id, bool triedtolikeowntopic = false) + public ActionResult ViewTopic(string id, bool triedtolikeowntopic = false, int page = 1) { + int realpage = page - 1; + int pageSize = 10; if (triedtolikeowntopic) ViewBag.Error = "You cannot like or dislike your own topic!"; var db = new ApplicationDbContext(); @@ -329,8 +333,31 @@ namespace Project_Unite.Controllers return new HttpStatusCodeResult(404); if (!ACL.CanSee(User.Identity.Name, topic.Parent)) return new HttpStatusCodeResult(403); + int pages = topic.Posts.GetPageCount(pageSize); + ViewBag.Page = realpage; + ViewBag.PageCount = pages; + ViewBag.PageSize = pageSize; return View(topic); } } + + public static class PaginationExtensions + { + public static int GetPageCount(this IEnumerable collection, int pageSize) + { + return (collection.Count() + pageSize - 1) / pageSize; + } + + public static IEnumerable GetItemsOnPage(this IEnumerable collection, int page, int pageSize) + { + var lst = collection.ToList(); + + for(int i = pageSize * page; i < pageSize + (pageSize * page) && i < lst.Count(); i++) + { + yield return lst[i]; + } + + } + } } \ No newline at end of file -- cgit v1.2.3