Ich versuche, eine sehr einfache Anwendung mit ASP.NET MVC zusammen, die Nachrichtenartikel und paginiert sie zusammen. Ich bin irgendwie auf halbem Weg, brauche aber Hilfe beim Aussortieren der Seitennummerierung und der Arbeit mit der Suchanfrage.(Hausaufgaben) MVC Paginierung Hilfe
Hier ist mein Homecontroller:
public ActionResult Index(String query, int? page)
{
// limit the number of articles per page
const int pageSize = 4;
// build the query
var ArticleQuery = from a in _db.ArticleSet select a;
// check if their is a query
if (!string.IsNullOrEmpty(query))
{
ArticleQuery = ArticleQuery.Where(a => a.headline.Contains(query));
}
// orders the articles
var OrderedArticles = ArticleQuery.OrderByDescending(a => a.posted);
// takes the ordered articles and paginates them
//var paginatedArticles = new PaginatedList(OrderedArticles.Skip((page ?? 0) * pageSize).Take(pageSize), page ?? 0, pageSize);
var paginatedArticles = new PaginatedList<Article>(OrderedArticles, page ?? 0, pageSize);
// return the paginated articles to the view
return View(paginatedArticles);
}
Die Idee ist, dass der Controller zeigt 4 Artikel pro Seite werden sie nach Datum bestellen. Hier ist die Ansicht I für die Index-Methode habe:
<ul id="pagination">
<% if (Model.PreviousPage) { %>
<li><%= Html.ActionLink("<< First Page", "Index")%></li>
<li><%= Html.ActionLink("<< Previous Page", "Index", new { page=(Model.PageIndex-1) }) %></li>
<% } %>
<% if (Model.NextPage) { %>
<li><%= Html.ActionLink("Next Page >>", "Index", new { page = (Model.PageIndex + 1) })%></li>
<li><%= Html.ActionLink("Last Page >>", "Index", new { page = (Model.TotalPages - 1) })%></li>
<% } %>
</ul>
Die Idee ist, dass diese beide Paginierung Links werden nur angezeigt, wenn die Bedingungen erfüllt sind.
Schließlich ist hier die PaginatedList Klasse für den Pager:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace NewsApp.Models
{
public class PaginatedList<T> : List<T>
{
public int PageIndex { get; private set; }
public int PageSize { get; private set; }
public int TotalCount { get; private set; }
public int TotalPages { get; private set; }
public PaginatedList(IQueryable<T> source, int pageIndex, int pageSize)
{
PageIndex = pageIndex;
PageSize = pageSize;
TotalCount = source.Count();
TotalPages = (int)Math.Ceiling(TotalCount/(double)PageSize);
this.AddRange(source.Skip(PageIndex * PageSize).Take(PageSize));
}
public bool HasPreviousPage
{
get
{
return (PageIndex > 0);
}
}
public bool HasNextPage
{
get
{
return (PageIndex + 1 < TotalPages);
}
}
}
HINWEIS: Ich will keine 3rd-Party-Komponenten wie MVCContrib usw. verwenden, wie dies für eine Zuordnung Universität ist so das würde besiegen Zweck.
Die Paginierung funktioniert jetzt gut, aber wenn ich eine Suche mache und z. /? query = test Ich möchte in der Lage sein, die Ergebnisse zu pagen, wenn sie verloren gehen:/
Vielen Dank.
beantwortet gerade etwas ähnliches: http://stackoverflow.com/questions/4659978/asp-net-mvc-pagination-using-take-and-skip/4662573#4662573 – Omu
alle Aktualisierungen danken Ihnen. – Cameron
Google gegoogelt CHT2520, weil ich verdächtig war. Nur Ergebnisse sehen wie Schulklassenpläne aus. Sieht aus, als hätte morgen jemand Hausaufgaben? – jfar