1

ページングのようなことをしたい。データベースに 100 人の連絡先があるとします。インデックス ページが初めて読み込まれると、データベースから 20 件の連絡先アイテムが読み込まれます。ページの最後に「もっと見る」ボタンがあります。ユーザーがそのボタンをクリックすると、データベースから次の 20 項目を読み込み、既に表示されている連絡先の下に表示します。

 public ActionResult Index(int no)
 {
     var contacts = GetContactFromDB(no) //no is used to know what is the current page number
 }

 public IList<Contact> GetContactFromDB(int pagenumber)
 {
      // here  write the query to get next 20 items 
  }

言い忘れたことの 1 つは、最初の 20 件を失いたくないということです。つまり、ユーザーがボタンをクリックすると、次の 20 件の連絡先が AJAX 要求を使用してデータベースから取得され、それらの新しい連絡先が追加されます。前の連絡先に続いて 20 件の連絡先...

4

3 に答える 3

4

SkipLinq のとTake拡張メソッドを組み合わせて使用​​するだけです。

return Contacts.Skip(PageSize * pageNumber).Take(PageSize).ToList();

注: これは、取得方法を考慮していませんContacts。しかし、私はあなたがすでにそれを知っていると思います:)また、それpageNumberは0ベースであると仮定しています。
Linq-To-SQL または Linq-To-Entities を使用している場合、Skipおよびへの呼び出しTakeも最終的なデータベース クエリの一部に変換されます。

于 2012-05-30T11:37:37.687 に答える
2

どうぞ

public IList<Contact> GetContactFromDB(int pagenumber)
 {
      return context.Contacts.OrderBy(p=>p).Skip(pagenumber*10).Take(10).ToList();
 }

必要な Contact クラスの任意のフィールドで注文できます。

また、各ページに表示する連絡先の数 (この場合は 10) を定数に格納することをお勧めします。コードをより汎用的にします。

于 2012-05-30T11:38:01.903 に答える
0

asp.net フォームでは、現在のインデックス (20、40) で非表示を配置し、常に x-20 から x まで実行します。

于 2012-05-30T11:41:21.590 に答える