2015-08-14 89 views
1

我在我的索引視圖上使用PagedList,它工作正常,因爲它只是一個列表。因此,當我點擊下一頁按鈕時,它會針對索引運行,並拉下一組物品。我的問題是,在高級搜索後嘗試在我的結果頁上使用此功能時。我的搜索在返回結果中工作正常。有在查詢中使用50+的參數,有些是基於什麼檢查/選擇等。這裏是一個可能的查詢的示例包含或排除:如何在MVC的搜索結果頁面上使用PagedList?

SQLstatement = string.Format("select * from Cards where {0} and {1} and (({2}) or ({3})) 
and CardID In (Select CardID from CardAbilities where {4});", final, finalexcludefrommulti, 
finalsplit, finalmulti, finalability); 
var CardList = db.Cards.SqlQuery(SQLstatement).ToList(); 
var pageNumber = page ?? 1; 
      int pageSize = 5; 
      ViewBag.OnePageOfCards = pageNumber; 
      return View(CardList.ToPagedList(pageNumber, pageSize)); 

這可能會導致一個SQL查詢是這樣的:

select * from Cards where maintypeid = 1 and redbluemanacost is null 
and redblackmanacost is null and blueblackmanacost is null 
and redmanacost is null and bluemanacost is null and blackmanacost is null 
and ((whitegreenmanacost > 0 or redgreenmanacost > 0 or greenbluemanacost > 0 
or greenblackmanacost > 0 or greenorlifecost > 0 or whitegreenmanacost > 0 
or redwhitemanacost > 0 or whitebluemanacost > 0 or whiteblackmanacost > 0 
or whiteorlifecost > 0) or (greenmanacost > 0 or whitemanacost > 0)) 
and CardID In (Select CardID from CardAbilities 
where abilityid = 3 or abilityid = 1007); 

這裏是我的部分觀點:

@Html.PagedListPager(Model, page => Url.Action("Results", new { page })) 

當我使用PagedList,結果還是回來了,但是當我點擊下頁它試圖通過將網址重新運行查詢。行動「結果「沒有任何價值和崩潰。我可以存儲結果並從中進行分頁嗎?是否有另一個分頁選項可以更好地工作?感謝您的任何建議。 :)

回答

0

我得到這個工作,通過創建一個持有SQLStatement字符串的會話。在我的搜索/索引控制器上,我將會話設置爲空,以便用戶可以開始新的搜索。

末搜索控制器的一部分:

Session["PageList"] = SQLstatement; 
var CardList = db.Cards.SqlQuery(SQLstatement).ToList(); 
return View(CardList.ToPagedList(pageNumber, pageSize)); 

新節添加到搜索控制器的開頭:

var pageNumber = page ?? 1; 
      int pageSize = 5; 
      ViewBag.OnePageOfCards = pageNumber; 
      if (Session["PageList"] != null) 
      { 
       string SearchResult = Session["PageList"].ToString(); 
       var ResultList = db.Cards.SqlQuery(SearchResult).ToList(); 

       foreach (var item in ResultList) 
       { 
        item.SubType = db.SubTypes.Single(x => x.SubTypeID == item.SubTypeID); 
        item.MainType = db.MainTypes.Single(x => x.MainTypeID == item.MainTypeID); 
        item.CardSet = db.CardSets.Single(x => x.CardSetID == item.CardSetID); 
        item.Rarity = db.Rarities.Single(x => x.RarityID == item.RarityID); 

       } 

       ViewBag.OnePageOfCards = pageNumber; 
       return View(ResultList.ToPagedList(pageNumber, pageSize)); 

亦通int? page在搜索的參數。

在搜索索引控制器補充說:

Session["PageList"] = null;