2013-07-17 47 views
0

篩選結果我從安裝的NuGet MVCPaging(https://github.com/martijnboland/MvcPagingASP.Net MVC MVCPaging錯誤嘗試同時使用尋呼機

我想使我的記錄搜索/過濾器,以及分頁,所以這是我「已經來了:

Cannot implicitly convert type 'MvcPaging.IPagedList<FGBS.Models.Customer>' to 'System.Linq.IQueryable<FGBS.Models.Customer>'. An explicit conversion exists (are you missing a cast?)

有人能看到WH:

public ActionResult Index(string str, int? page) 
    { 
     int pageSize = page.HasValue ? page.Value - 1 : 0; 

     // Get initial recordset 
     var items = db.Customers.OrderByDescending(a => a.OfferCreatedOn).Include(a => a.Offers); 

     // check if searchstring has any value, and filter if so 
     if (!string.IsNullOrWhiteSpace(str)) 
     { 
      items = items.Where(t => (t.CustomerName.ToLower().IndexOf(str.ToLower()) > -1) 
       || (t.OfferReference.ToLower().IndexOf(str.ToLower()) > -1) 
       || (t.EmailAddress.ToLower().IndexOf(str.ToLower()) > -1) 
      ); 
     } 

     // Pass remaining list to the pager 
     // 
     // Error on the next line 
     // 
     items = items.OrderByDescending(a => a.OfferCreatedOn) 
      .ToPagedList(page ?? 0, pageSize); 

     return View(items); 
} 

不過,我在最後一行得到一個錯誤在我做錯了嗎?

謝謝你,馬克

回答

1

您需要更改模型視圖,因爲你沒有得到的IEnumerable,而你得到IPagedList,即,與客戶列表一起,公開諸如HasPreviousPage,的PageNumber屬性,PageCount等等,這是你用來實現頁面導航邏輯。

例如:

@model PagedList.IPagedList<Customer> 
@foreach (var item in Model) 
{ 
    @Html.DisplayForModel() 
} 
@if (Model.HasPreviousPage) 
{ 
    <li>@Html.ActionLink("<", null, new { page = Model.PageNumber - 1})</li> 
} 

更新

對不起,不明白一見鍾情的錯誤。 錯誤是您將變量定義爲var,這意味着它在編譯時得到它的類型,當它獲得第一個值時。當您將查詢結果傳遞給它時,它將變爲IQueryable<FGBS.Models.Customer>類型,此後,您嘗試傳遞ToPagedList(即IPagedList)的結果,並且運行時無法隱式轉換它,因爲您可能會丟失一些數據。嘗試爲此使用不同的變量。或者你可以只:

return View(items.OrderByDescending(a => a.OfferCreatedOn).ToPagedList(page ?? 0, pageSize)); 
+0

嗨 - 這不是在視圖中,我發現了錯誤,它在控制器 - 我還是謝謝你, – Mark

+0

非常感謝你@Igarioshka抽出時間來幫助第二次。你的建議完美運作。現在我只需要仔細查看一下,並從中學習。一切順利,乾杯,馬克 – Mark