mirror of
https://github.com/lempamo/Project-Unite.git
synced 2025-01-22 11:21:47 -05:00
paginate forum posts
This commit is contained in:
parent
d3935e31b5
commit
f5c33c367a
2 changed files with 45 additions and 3 deletions
|
@ -318,9 +318,13 @@ public ActionResult MarkRead(string id)
|
||||||
return RedirectToAction("ViewUnread");
|
return RedirectToAction("ViewUnread");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[Authorize]
|
[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)
|
if (triedtolikeowntopic)
|
||||||
ViewBag.Error = "You cannot like or dislike your own topic!";
|
ViewBag.Error = "You cannot like or dislike your own topic!";
|
||||||
var db = new ApplicationDbContext();
|
var db = new ApplicationDbContext();
|
||||||
|
@ -329,8 +333,31 @@ public ActionResult ViewTopic(string id, bool triedtolikeowntopic = false)
|
||||||
return new HttpStatusCodeResult(404);
|
return new HttpStatusCodeResult(404);
|
||||||
if (!ACL.CanSee(User.Identity.Name, topic.Parent))
|
if (!ACL.CanSee(User.Identity.Name, topic.Parent))
|
||||||
return new HttpStatusCodeResult(403);
|
return new HttpStatusCodeResult(403);
|
||||||
|
int pages = topic.Posts.GetPageCount(pageSize);
|
||||||
|
|
||||||
|
ViewBag.Page = realpage;
|
||||||
|
ViewBag.PageCount = pages;
|
||||||
|
ViewBag.PageSize = pageSize;
|
||||||
return View(topic);
|
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];
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
@model Project_Unite.Models.ForumTopic
|
@using Project_Unite.Controllers;
|
||||||
|
@model Project_Unite.Models.ForumTopic
|
||||||
@using Microsoft.AspNet.Identity
|
@using Microsoft.AspNet.Identity
|
||||||
@{
|
@{
|
||||||
ViewBag.Title = Model.Subject;
|
ViewBag.Title = Model.Subject;
|
||||||
|
@ -30,7 +31,7 @@
|
||||||
Html.RenderPartial("~/Views/Shared/_ModeratorBar.cshtml", Model);
|
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)
|
if (Request.IsAuthenticated)
|
||||||
{
|
{
|
||||||
|
@ -75,3 +76,17 @@
|
||||||
@{
|
@{
|
||||||
Html.RenderPartial("~/Views/Shared/_ModeratorBar.cshtml", Model);
|
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>
|
Loading…
Reference in a new issue