我有3个类的viewmodel
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 </td>
<td> :</td>
<td><div id="KnjigeNormativa">@Html.Partial("partKnjigeNormativaView", Model)</div> </td>
</tr>
<tr>
<td>Sub - Category </td>
<td> :</td>
<td><div id="GrupeRadova"> @Html.Partial("partGrupeRadovaView", Model)</div></td>
</tr>
<tr>
<td>Products </td>
<td> :</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]'.
第3次局部视图通话。
这里也是控制器的代码
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()但没有成功......
有人能指出我该怎么做吗?
答案 0 :(得分:2)
试试这个:
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");
}
}
然后在视图中:
@Html.PagedListPager((IPagedList)ViewBag.ResultsPage,
page => Url.Action("SelectPozicije", "ControllerName", new { SelectedPosId = YourPosId, pnum = page},
PagedListRenderOptions.PageNumbersOnly)
修改需要相应修改的内容。希望它有所帮助。
答案 1 :(得分: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 </td>
<td> :</td>
<td><div id="KnjigeNormativa">@Html.Partial("partKnjigeNormativaView", Model.ngrupa)</div> </td>
</tr>
<tr>
<td>Sub - Category </td>
<td> :</td>
<td><div id="GrupeRadova"> @Html.Partial("partGrupeRadovaView", Model.gradova)</div></td>
</tr>
<tr>
<td>Products </td>
<td> :</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)