在剃刀中只有一个局部视图的分页

时间:2014-02-24 14:41:46

标签: c# asp.net-mvc asp.net-mvc-4 razor pagination

我有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&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]'.

第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()但没有成功......

有人能指出我该怎么做吗?

2 个答案:

答案 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&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)