summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael <[email protected]>2017-04-20 09:20:05 -0400
committerMichael <[email protected]>2017-04-20 09:20:05 -0400
commitf5c33c367a4c7b834d7c684c008180a35af071bc (patch)
tree2b00d67d569b554d24c91751febf33e3deffb441
parentd3935e31b57bc7669a615d52f5e441dbed7acec4 (diff)
downloadproject-unite-f5c33c367a4c7b834d7c684c008180a35af071bc.tar.gz
project-unite-f5c33c367a4c7b834d7c684c008180a35af071bc.tar.bz2
project-unite-f5c33c367a4c7b834d7c684c008180a35af071bc.zip
paginate forum posts
-rw-r--r--Project-Unite/Controllers/ForumController.cs29
-rw-r--r--Project-Unite/Views/Forum/ViewTopic.cshtml19
2 files changed, 45 insertions, 3 deletions
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<T>(this IEnumerable<T> collection, int pageSize)
+ {
+ return (collection.Count() + pageSize - 1) / pageSize;
+ }
+
+ public static IEnumerable<T> GetItemsOnPage<T>(this IEnumerable<T> 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
diff --git a/Project-Unite/Views/Forum/ViewTopic.cshtml b/Project-Unite/Views/Forum/ViewTopic.cshtml
index a9272b6..704566f 100644
--- a/Project-Unite/Views/Forum/ViewTopic.cshtml
+++ b/Project-Unite/Views/Forum/ViewTopic.cshtml
@@ -1,4 +1,5 @@
-@model Project_Unite.Models.ForumTopic
+@using Project_Unite.Controllers;
+@model Project_Unite.Models.ForumTopic
@using Microsoft.AspNet.Identity
@{
ViewBag.Title = Model.Subject;
@@ -30,7 +31,7 @@
Html.RenderPartial("~/Views/Shared/_ModeratorBar.cshtml", Model);
}
-@foreach (var post in Model.Posts.OrderBy(x => x.PostedAt))
+@foreach (var post in Model.Posts.OrderBy(x => x.PostedAt).GetItemsOnPage(ViewBag.Page, ViewBag.PageSize))
{
if (Request.IsAuthenticated)
{
@@ -75,3 +76,17 @@
@{
Html.RenderPartial("~/Views/Shared/_ModeratorBar.cshtml", Model);
}
+
+<ul class="pagination">
+ @for(int i = 1; i <= ViewBag.PageCount; i++)
+ {
+ if (i == ViewBag.Page - 1)
+ {
+ <li class="active">@Html.ActionLink(i.ToString(), "ViewTopic", "Forum", null, new { id = Model.Discriminator, page = i })</li>
+ }
+ else
+ {
+ <li>@Html.ActionLink(i.ToString(), "ViewTopic", "Forum", null, new { id = Model.Discriminator, page = i })</li>
+ }
+ }
+</ul> \ No newline at end of file