2016-07-14 21 views
1

我有以下問題。我想做一個很好的分頁,我不想從WebService的所有記錄下載到我的應用程序。尋呼.net MVC - 無需從WebService下載所有記錄

控制器代碼:

public ActionResult Vacations(int? page) 
     { 
      int pageNumber = page ?? 1; 
      int quantity = 5; 
      using (MyWebService.MyWebServiceClient client = new MyWebService.MyWebServiceClient()) 
      { 
       var vacations = client.GetUserAbsence(SessionManager.CurrentToken, quantity, pageNumber); 
       var onePageOfVacations = vacations.ToPagedList(pageNumber, quantity); 
       ViewBag.OnePageOfVacations = onePageOfVacations; 
      } 
      return View(); 
     } 

查看代碼:

<h2>Vacations</h2> 
<div> 
    <table class="table tablesorter table-striped"> 
     <thead> 
      <tr> 
       <th>Data od</th> 
       <th>Data do</th> 
       <th>Ilość dni</th> 
      </tr> 
     </thead> 
     <tbody> 
      @{ 
       foreach (var v in ViewBag.OnePageOfVacations) 
       { 
        <tr> 
         <td>@v.From_Date</td> 
         <td>@v.To_Date</td> 
         <td>@v.Element_Name</td> 
        </tr> 
       } 
      } 
     </tbody> 
     <tfoot> 
      <tr> 
       <th>Data od</th> 
       <th>Data do</th> 
       <th>Ilość dni</th> 
      </tr> 
     </tfoot> 
    </table> 
</div> 

<!-- output a paging control that lets the user navigation to the previous page, next page, etc --> 
@Html.PagedListPager((IPagedList)ViewBag.OnePageOfVacations, page => Url.Action("Vacations", new { page })) 

我在web服務 「GetUserAbsence()」,這回我只有這個數字的,我需要有記錄的方法。現在我只有一個頁面,我無法顯示其他結果。有我的問題 - 如何將此解決方案與PagedList連接起來,或者如何在此解決方案上創建新的分頁?

+0

你需要使用ajax或類似的東西,否則視圖無法更新,它完全是靜態的,不能回調服務器並告訴它發送更多的數據。我沒有太多時間向您發送更多信息,但這可能有助於http://stackoverflow.com/questions/8517071/send-json-data-via-post-ajax-and-receive-json-response-from- controller-mvc – sringland

+1

如果知道記錄總數,可以使用'StaticPagedList',例如'ViewBag.OnePageOfVacations = new StaticPagedList (vacations,pageNumber,quantity,totalItems);'(可能意味着您需要第二個服務方法返回'.Count()',但這應該是非常快的(或者你可以修改方法返回一個包含記錄和計數的對象) –

+0

請從評論中作出答案。謝謝Stephen!It Works! – Sowiarz

回答

2

MVC.PagedList有一個StaticPagedList方法,允許您提供IEnumerable<T>而不是IQuerable<T>,但您必須知道記錄的總數。在你的情況下,將

var vacations = client.GetUserAbsence(SessionManager.CurrentToken, quantity, pageNumber); 
int totalItems = .... // see following note 
ViewBag.OnePageOfVacations = new StaticPagedList<yourModel>(vacations, pageNumber, quantity, totalItems); 

這意味着你的服務需要包括返回的總記錄數的另一種方法(但應該是非常快的),或者你可以修改GetUserAbsence()方法返回一個包含已過濾集合的屬性的對象以及總記錄的值。

附註:我建議你通過一個強類型的模型,視圖,而在使用ViewBag,使控制器代碼

.... 
var model = new StaticPagedList<yourModel>(vacations, pageNumber, quantity, totalItems); 
return View(model); 

,並在視圖

@model PagedList.IPagedList<yourModel> 
.... 
@foreach (var v in Model) 
{ 
    .... 
} 
.... 
@Html.PagedListPager(Model, page => Url.Action("Vacations", new { page }))