2016-11-03 3 views
2

WCFサービスを使用したMVCプロジェクトがあります。サーバーサイドページングMVC 6.0

私はデータのリストを表示するときに、データベース/サービスからすべてをロードし、クライアントのページングを行いたいと思います。しかし、私はサーバー側のページングが必要です。レコードが100個あり、ページサイズが10の場合、ユーザーがページ1をクリックすると、データベースから最初の10個のレコードのみが取得され、ユーザーがページ3をクリックすると、対応する10個のレコード。 私はAngularまたは他のブートストラップを使用していません。

誰かに私の手引き方法を教えてもらえますか?

public ActionResult Index(int pageNo = 1) 
    { 
     .. 
     .. 
     ..  

     MyViewModel[] myViewModelListArray = MyService.GetData();   

     //when I create this PageList, BLL.GetData have to retreive all the records to show more than a single page no. 
     //But if the BLL.GetData() was changed to retrieve a subset, then it only shows a single page no. 
     //what I wanted to do is, show the correct no of pages (if there are 50 records, and pageSize is 10, then show 
     //page 1,2,3,4,5 and only retrieve 10 records at a time. 
     PagedList<MyViewModel> pageList = new PagedList<<MyViewModel>(myViewModelListArray, pageNo, pageSizeListing); 
     .. 
     .. 
     .. 
     return View(pageList); 
    } 
+0

あなたが試したことを示すいくつかのコードを投稿できますか?どのような環境で作業しているのか、使用しているコーディングのスタイルを誰にでも見せることができます。 –

+0

いくつかのコードを表示してください。特定のレコードセットが返されるべきことをサーバーに伝えるために、サーバーに開始と制限を渡すこともできます。 – bogzy

+1

@bogzy PageSizeとPageNoを渡すことによって返されるレコードの特定のセットを制限すると、単一のページしか表示されませんでした。 – user423415

答えて

1

サービスメソッドにパラメータのページサイズとページ番号を追加し、結果をTotalCountとList Items(現在のページのアイテムであるアイテム)を返すオブジェクトにします。次に、これらの値を使用してPagedListを作成できます。

ビジネスロジックコードでは、アイテムの数とページのアイテムの2つのクエリを実行します。

また、プロジェクトを開始する場合は、自分の都合に合わせて、無駄なWCFサービスをアーキテクチャから削除してください。

+0

PaedListのTotalCountにはどのプロパティを設定しますか? – user423415

+0

PagedListは使用しません。レンダリング機能(htmlヘルパーメソッド)を使用する場合は、独自のクラス(https://github.com/troygoode/PagedList/blob/master/src/PagedList/IPagedList.cs)でこのインタフェースを実装できます。 – Stilgar

2

最善のアプローチは、事業者が&テイクをスキップエンティティへのLINQを使用することです。ページ

int items_per_page = 10; 
MyViewModel[] myViewModelListArray = MyService.GetData().OrderBy(p => p.ID).Skip((pageNo - 1) * items_per_page).Take(items_per_page).ToArray(); 

注たとえば

、:データを注文する必要があり、そのページには、いくつかの一貫性を持っている(しかし、私は、任意のフィールドのIDでやりました)。また、いくつかのデータベースでは、 '限度'または 'トップ'(Take/Skipの実装方法)を適用するために 'order by'が必要でした。

データをどのように取得しているのか分かりません。 GetDataを使用して完全なリストを取得してから除外する代わりに、GetData内のクエリにページネーションを含めてください(不要なデータを取得しないようにしてください)。