1. ホーム
  2. c#

[解決済み] ASP.NET MVCでページネーションを行うにはどうすればよいですか?

2023-04-08 20:46:31

質問

ASP.NET MVCでページ分割を行うための最も好ましい、簡単な方法は何ですか? すなわち、リストをいくつかのブラウズ可能なページに分割する最も簡単な方法は何ですか。

例として、データベース/ゲートウェイ/リポジトリから次のような要素のリストを取得するとします。

public ActionResult ListMyItems()
{
    List<Item> list = ItemDB.GetListOfItems();
    ViewData["ItemList"] = list;

    return View();
}

簡単のために、私はアクションのパラメータとしてページ番号だけを指定したいと思います。こんな感じで。

public ActionResult ListMyItems(int page)
{
   //...
}

どのように解決するのですか?

さて、データソースは何でしょうか?あなたのアクションは、いくつかのデフォルトの引数を取ることができます。

ActionResult Search(string query, int startIndex, int pageSize) {...}

は、startIndex が 0 で pageSize が (例えば) 20 であるように、ルーティングのセットアップでデフォルトに設定されています。

        routes.MapRoute("Search", "Search/{query}/{startIndex}",
                        new
                        {
                            controller = "Home", action = "Search",
                            startIndex = 0, pageSize = 20
                        });

フィードを分割するには、LINQを使うと非常に簡単です。

var page = source.Skip(startIndex).Take(pageSize);

("startIndex" ではなく "pageNumber" を使用する場合は乗算を行う)

LINQ-toSQL、EFなどでは、これはデータベースまで"compose"する必要があります。

そして、次のページへのアクションリンクを使用することができるはずです(等)。

<%=Html.ActionLink("next page", "Search", new {
                query, startIndex = startIndex + pageSize, pageSize }) %>