如何在ASP.NET MVC中分页多个数据集

时间:2009-08-04 09:24:56

标签: c# .net asp.net-mvc

在单个视图中,我将有三组分页数据。对于我将拥有的每个模型,这意味着什么

  • 对象
  • 页面索引
  • 页面大小

我最初的想法是例如:

public class PagedModel<T> where T:class
{
    public IList<T> Objects { get; set; }
    public int ModelPageIndex { get; set; }
    public int ModelPageSize { get; set; }
}

然后有一个要提供给动作的模型,例如:

public class TypesViewModel
{
    public PagedModel<ObjectA> Types1 { get; set; }
    public PagedModel<ObjectB> Typed2 { get; set; }
    public PagedModel<ObjectC> Types3 { get; set; }
}

因此,如果我那么继续从类型继承索引视图:

System.Web.Mvc.ViewPage<uk.co.andrewrea.forum.Web.Models.TypesViewModel>

现在我对索引的初始aciton方法就是:

    public ActionResult Index()
    {
        var forDisplayPurposes = new TypesViewModel();
        return View(forDisplayPurposes);
    }

如果我想要翻页,那么我正在努力决定采取哪种行动。假设我选择了Types2 PageModel的下一页。为了返回显示Types2 PageModel的第二页的新视图,该动作应该是什么样子

我当时想要复制动作但是将它与POST一起使用

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(TypesViewModel model)
{
    return View(model);
}

这是接近它的好方法吗?我知道总会有Session,但我只是想知道目前是如何实现这样的。如果任何最好的方法已被相互接受和事物。

这么简单,一页有多个分页模型。如何使用包装器模型为每个数据保留数据。您应该以哪种方式传递模型以及您应该以哪种方式分页数据,即Form Post

最后,我已经看到路线考虑到了这一点,即

{controller}/{action}/{id}/{pageindex}/{pagesize}

但是这仅仅考虑了一个模型,我真的不想重复我在包装模型中的模型数量的pagesize和pageindex值。

感谢您的时间!!

安德鲁

1 个答案:

答案 0 :(得分:0)

恕我直言,如果你不仅仅是对象的集合,而是一些扩展类型的集合,例如:

public class PagedModelElement<T> where T:class
{
    public byte Step { get; set; }
    public string Name { get; set; }
    public T Value { get; set; }
}

public class PagedModel<T> where T : class
{
    public IList<PagedModelElement<T>> Objects { get; set; }
}

不需要ModelPageIndex,因为您可以轻松返回属于某个页面的所有对象(您可以使用索引器)以及ModelPageSize可以通过Count()函数计算属于某个页面的所有对象。

所以你不必担心将这两个参数传递给URL,你需要的唯一参数是PageNo:

{controller}/{action}/{pageNo}
Account/ShowUsers/3