我試圖把一個非常簡單的應用程序使用ASP.NET MVC顯示新聞文章和分頁他們。我有一些中途,但需要一些幫助,整理分頁,並使其與搜索查詢一起工作。這不是這個問題的重複(Homework) MVC Pagination Help,因爲它處理在使用分頁時保持搜索查詢並被推薦開始一個新問題。MVC分頁幫助與查詢字符串
這裏是我的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);
}
的想法是,控制器顯示4項每頁會按日期排序。這裏是我對索引方法的看法:
<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>
想法是,這兩個分頁鏈接將只顯示條件爲真。
最後這裏是尋呼機的PaginatedList類:
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);
}
}
}
注:我不希望使用任何第三方的組件,如MVCContrib等,因爲這是一所大學的分配,從而會破壞目的。
現在分頁工作正常,但是當我搜索時, /?query = test我希望能夠在結果丟失的時刻對結果進行分頁。我假設我將需要諸如/?query = test & page = 1
謝謝。
你不需要添加(家庭作業)的標題 - 沒有任何用途。最好添加一個標籤。你被低估的原因可能是因爲你有三個幾乎相同的問題。要麼縮小你的問題範圍,要麼更加努力地做自己的研究。 – 2011-01-12 02:57:59
我被告知要創建一個新問題,否則如果我必須繼續編輯原始問題並發表評論,則問題會被扭曲。 – Cameron 2011-01-12 03:28:56