用于在ASP.NET MVC中分页不同类型的数据集的可重用方法

时间:2013-08-26 23:35:09

标签: asp.net-mvc

我有各种数据模型 - 我们称之为帐户用户订单。 (最终还有更多。)

我的视图将显示Account对象,User对象或Order对象的列表。每个视图都允许根据搜索条件过滤这些对象(每个条件对象都是唯一的。)

使用页面的视图模型实现分页的最佳方法是什么,这样每个动作模型都不必包含某种页面参数?我的目标是在页面视图模型的页面视图中获取分页信息。

注意:这是我开始接近这个的方式:

通用视图模型:

public ListViewModel<T> {
    public List<T> Models {get;set;}
    public PageRange PageRange {get;set;}
}

每个视图都有一个可能如下所示的视图模型:

public AccountListViewModel : ListViewModel<Account> { }

每个视图模型都包含对视图有帮助的元素(显然),包括可能传递回控制器进行过滤的标准。因此列表操作变为:

public ActionResult List(AccountListViewModel viewModel) {
    var accounts = /* retrieve data based on properties of view model */

    var trimmedAccounts = /* skip and take elements from accounts object based on viewModel.PageRange */
    accounts.Models = trimmedAccounts
    return View(viewModel);
}

除了查询字符串必须包含“PageRange.PageStart =#”(其中#是一个整数)才能正确绑定之外,这是有效的。如果它在查询字符串中检测到“start =”并将其连接到视图模型,我想让MVC调用PageRange的绑定。

0 个答案:

没有答案