私は、ニュース記事を表示し、それらにページを設定するASP.NET MVCを使用して非常に単純なアプリケーションをまとめようとしています。私はそこの半分のところですが、ページネーションを整理して検索クエリを処理するための助けが必要です。これは、この質問(Homework) MVC Pagination Helpの複製ではないので、ページネーションを使用するときに検索クエリを保持することを扱い、新しい質問を開始することが推奨されています。MVCページネーションのクエリ文字列のヘルプ
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);
}
アイデアは、コントローラが日付で注文しますページあたり4つの項目を示していることである:
は、ここに私にHomeControllerです。
<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>
アイデアは、条件に該当する場合、これらの二つの改ページのリンクのみが表示されるということです。ここで私はIndexメソッドを持っている図です。
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);
}
}
}
注:最後にここに
は、ページャ用PaginatedListクラスである私は、これは大学の割り当てのためにあるように台無しにしてしまうなどMVCContribのような任意のサードパーティ製のコンポーネントを使用したくありません」目的。
ページネーションは今すぐうまく動作しますが、私が検索して、 /?query = test結果をページングできるようにしたい、紛失してしまいます。私は/?query = test & page = 1
のようなものが必要になると推測しています。
タイトルに「宿題」を追加する必要はありません。タグを追加する方が良い。あなたがdownvotedされている理由は、3つのほとんど同じ質問があるためです。問題を絞り込んだり、自分の研究にもっと力を入れてください。 –
私は新しい質問を作成するように言われました。それは、元の質問を編集してコメントを投稿しなければならないと、問題が歪んだからです。 – Cameron