2013-09-21 142 views
0

我正在嘗試爲列表生成自定義分頁。Asp.net MVC4:自定義分頁

我want-什麼

-I有一個控制器,通過LINQ查詢與Take()方法返回從數據庫中只有10行。 - 當視圖加載時顯示10行,我很好奇的下一件事是分頁。

儘管pagesize設置爲10行,並且它超過10;我正試圖顯示數據庫中的next,Previous 10個記錄的列表按鈕。

我試圖在這個映射它way-

控制器

public ViewResult _SeeAllLedger(LedgerModel user) { 
      List<LedgerModel> ledger = null; 

      if (ModelState.IsValid) { 
       ledger = (from u in db.LedgerTables 
          select new LedgerModel { 
           AccID = u.AccID, 
           AccountHead = u.AccountHead, 
           Place = u.Place, 
           SerialNo = Convert.ToInt32(u.SerialNumber) 
          }).ToList(); 

      } 

      return View(ledger.Take(10)); //Returning 10 records 
     } 

查看 -

@foreach (var item in Model) { 

     <tr class="ladger-details"> 
      <td> 
       @Html.DisplayFor(modelItem => item.AccID) 
      </td> 
      <td> 
       <a href="@Html.DisplayFor(modelItem => item.AccountHead)">@Html.DisplayFor(modelItem => item.AccountHead)</a> 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Place) 
      </td> 
        </tr> 
     if (Model.Count > 10) { 
      <a class="btn btn-success">Next</a> //Trying to show custom button only if this state is true 
     } 
    } 

如我所料沒有工作,什麼是其他從LINQ查詢映射行的方法?

回答

1

我想你錯過了很多部分,以使其正常工作。主要是,你總是採取相同的10條記錄。這應該有助於你朝正確的方向發展。

你將(至少)需要知道頁碼和頁面大小(在你的情況下是10)。如果你希望它更有用,排序欄和排序方向也會有所幫助。

ledger = (from u in db.LedgerTables 
    select new LedgerModel { 
     AccID = u.AccID, 
     AccountHead = u.AccountHead, 
     Place = u.Place, 
     SerialNo = Convert.ToInt32(u.SerialNumber) 
    }).Skip(pageNum * pageSize).Take(pageSize).ToList(); 

我使用ViewBag來跟蹤當前頁面,頁面大小和總記錄,以循環遍歷併爲所有頁面構建鏈接。

+0

怎麼樣?我如何獲得當前頁面?它在使用'.Skip()'時顯示錯誤' – Manoj

+0

這些是你必須創建和跟蹤自己的變量。 – MikeSmithDev