2014-02-24 72 views
2

只有一個局部視圖,我有3類分頁用於剃刀

public IEnumerable<Nazivi_grupa> ngrupa { get; set; } 
    public IEnumerable<Grupe_radova> gradova { get; set; } 
    public IEnumerable<Pozicije> pozicije { get; set; } 

局部視圖partPozicijeView.cshtml

@model PagedList.IPagedList<WebApplication3.ViewModels.mainViewModel> 
@using PagedList.Mvc; 

@{ some code to show table } 

和主視圖視圖模型index.cshtml

@model WebApplication3.ViewModels.mainViewModel 
@using PagedList.Mvc; 
    <tr> 
     <td>Category&nbsp;</td> 
     <td>&nbsp;:</td> 
     <td><div id="KnjigeNormativa">@Html.Partial("partKnjigeNormativaView", Model)</div> </td> 
    </tr> 
    <tr> 
     <td>Sub - Category&nbsp;</td> 
     <td>&nbsp;:</td> 
     <td><div id="GrupeRadova"> @Html.Partial("partGrupeRadovaView", Model)</div></td> 
    </tr> 
    <tr> 
     <td>Products&nbsp;</td> 
     <td>&nbsp;:</td> 
     <td><div id="Pozicije"> @Html.Partial("partPozicijeView", Model)</div></td> 
    </tr> 

那調用3個部分視圖來顯示級聯下拉菜單中的前2個表格和表格中的第3個(pozicije)。

現在我想分頁添加到該表,但不管是什麼,我在第三部分視圖調用得到一個錯誤

The model item passed into the dictionary is of type 'WebApplication3.ViewModels.mainViewModel', but this dictionary requires a model item of type 'PagedList.IPagedList`1[WebApplication3.ViewModels.mainViewModel]'. 

這裏也代碼控制器

public ActionResult SelectPozicije(string SelectedPosId, int? pnum) 
    { 


     int pageNumber = (pnum ?? 1); 

     mainViewModel mv = new mainViewModel(); 
     mv.pozicije = new List<Pozicije>(); 

//   mv.pozicije = (from p in mainViewModel.getPozicije() 
//       where p.grupa == SelectedPosId 
//       select p).ToPagedList(pageNumber, 25); 
     mv.pozicije = (from p in mainViewModel.getPozicije() 
         where p.grupa == SelectedPosId 
         select p).ToList(); 


     return PartialView("partPozicijeView", mv); 
    } 

我試過(註釋代碼)返回.ToPagedList(),但沒有成功......

有人可以點我如何做到這一點?在視圖

public ActionResult SelectPozicije(string SelectedPosId, int? pnum) 
{ 
    int pageNumber = (pnum ?? 1); 

    mainViewModel mv = new mainViewModel(); 
    mv.pozicije = new List<Pozicije>(); 
    mv.pozicije = (from p in mainViewModel.getPozicije() 
        where p.grupa == SelectedPosId 
        select p).ToList(); 

    if (mv.pozicije.Count() != 0) 
    { 
     var resultsPage = mv.pozicije.ToPagedList(pageNumber, 20); 
     ViewBag.ResultsPage = resultsPage; 
     return PartialView("partPozicijeView", mv); 
    } 
    else 
    { 
     return PartialView("partPozicijeView"); 
    } 
} 

然後:

回答

2

試試這個代碼

//your main model 
namespace WebApplication3.ViewModels 
{ 
public class mainViewModel 
{ 
    public IEnumerable<Nazivi_grupa> ngrupa { get; set; } 
    public IEnumerable<Grupe_radova> gradova { get; set; } 
    public IEnumerable<Pozicije> pozicije { get; set; } 
} 
} 

您的主視圖

//your main view Index.cshtml 
@model WebApplication3.ViewModels.mainViewModel 
<tr> 
    <td>Category&nbsp;</td> 
    <td>&nbsp;:</td> 
    <td><div id="KnjigeNormativa">@Html.Partial("partKnjigeNormativaView", Model.ngrupa)</div> </td> 
</tr> 
<tr> 
    <td>Sub - Category&nbsp;</td> 
    <td>&nbsp;:</td> 
    <td><div id="GrupeRadova"> @Html.Partial("partGrupeRadovaView", Model.gradova)</div></td> 
</tr> 
<tr> 
    <td>Products&nbsp;</td> 
    <td>&nbsp;:</td> 
    <td><div id="Pozicije"> @Html.Partial("partPozicijeView", Model.pozicije)</div></td> 
</tr> 

你的主控制器

public ActionResult Index(string SelectedPosId, int? page) 
{ 
int pageNumber = (page ?? 1); 
mainViewModel mv = new mainViewModel(); 
mv.ngrupa = //code for ngrupa list 
mv.gradova = //code for ngrupa list 
mv.pozicije = (from p in mainViewModel.getPozicije() 
       where p.grupa == SelectedPosId 
       order by p.id //order column here 
       select p).ToPagedList(pageNumber, 25); 
return View(mv); 
} 

你的部分觀點

//your paged partial view partPozicijeView.cshtml 
@model PagedList.IPagedList<WebApplication3.ViewModels.Pozicije> 
@using PagedList.Mvc; 

@{ some code to show table } 
@Html.PagedListPager((IPagedList)ViewBag.ResultsPage, 


page => Url.Action("Index", "ControllerName", new { SelectedPosId = YourPosId, page = page},PagedListRenderOptions.PageNumbersOnly) 
+0

我沒有將ViewModels.Pozicije聲明爲單獨的類。這只是mainViewModel類中的一個屬性。 –

+0

你已經在mainViewModel中聲明瞭這個pozicije屬性,但是這是Pozicije的列表,即'IEnumerable ',其中'Pozicije'應該是一個類刪除 –

+0

它是一個單獨的數據庫表模型。 main viewmodel使用這3個表來顯示2個下拉列表和一個需要分頁的表。 –

2

試試這個

@Html.PagedListPager((IPagedList)ViewBag.ResultsPage, 
         page => Url.Action("SelectPozicije", "ControllerName", new { SelectedPosId = YourPosId, pnum = page}, 
         PagedListRenderOptions.PageNumbersOnly) 

修改需要作相應的修改內容。希望能幫助到你。

+0

這是相同的錯誤...我認爲這有一些模型聲明在我的部分看法cshtml是不同於index.cshtml中的聲明 @model PagedList.IPagedList <的WebApplication3.ViewModels.mainViewModel> –

+0

是的,這應該是問題。請同時顯示PartialView代碼 – Dumisani

+0

我不認爲PV代碼是重要的,這只是foreach中的數據存在

​​標籤。它甚至在我啓動應用程序時不會執行。 「​​
@Html.Partial("partPozicijeView", Model)
」第一次被調用時出錯... –