首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PagedList ViewModel实现

PagedList ViewModel实现
EN

Stack Overflow用户
提问于 2012-12-10 18:38:59
回答 3查看 2.8K关注 0票数 1

我正在尝试找出在asp.net MVC中使用ViewModel实现页面列表的正确方法。

假设我有以下PagedClientViewModel:

代码语言:javascript
复制
public class PagedClientViewModel
{
    public PagedList.IPagedList<ClientViewModel> Clients { get; set; }
}

public class ClientViewModel
{
    public string ClientNumber { get; set; }
    public string ClientName { get; set; }       
}

我的视图将按如下方式引用模型:

代码语言:javascript
复制
@model PagedClientViewModel

动作方法看起来像这样:

代码语言:javascript
复制
    public ActionResult Index(int? page)
    {
        var pageNumber = page ?? 1;

        var clients = GetAllClients();

        var onePageOfClients = clients.ToPagedList(pageNumber, 25);

        PagedClientViewModel model = new PagedClientViewModel();

        var clientViewModels = new List<ClientViewModel>();

        foreach (var client in clients)
        {
            ClientViewModel clientVM = new ClientViewModel
            {
                ClientName = client.CLIENTNAME,
                ClientNumber = client.CLIENTNO,         
            };
            clientViewModels.Add(clientVM);
        }                    

        model.Clients = //how do I add the clientViewModels to the PagedList<ClientViewModel>?

        return View(model);
    }

我不想在创建视图模型时迭代数据库中的整个客户端记录列表--拥有一个包含页面列表的视图模型会不会使事情变得过于复杂?我不想用ViewBag!

我的ViewModel应该是什么样子的?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-10 22:55:20

您应该更改检索数据的调用,使其包含一个页面参数,并在数据库中进行过滤。这样,您只需从数据库返回所需的数据。

代码语言:javascript
复制
var clients = GetClients(page);

此外,如果您不想遍历返回的客户端(这里似乎不需要),只需将返回的列表直接设置为您的ViewModel即可。像这样的东西会起作用的。确保您更新了ViewModel,以便正确键入model.Clients

代码语言:javascript
复制
var clients = GetClients(page);

model.Clients = clients;
票数 2
EN

Stack Overflow用户

发布于 2012-12-11 16:02:16

通过使用这些答案的组合,我得到了一个非常好的结果:

代码语言:javascript
复制
    public ActionResult Index(PagedClientViewModel model)
    {
        var pageIndex = model.Page ?? 1;
        var clients = from client in GetAllClients() orderby client.CLIENTNUMBER
                      select new ClientViewModel
                          {
                              ClientName = client.CLIENTNAME,
                              ClientNumber = client.CLIENTNO

                          };        

        model.Clients = clients.ToPagedList(pageIndex, 25);

        return View(model);
    }


public class PagedClientViewModel
{
    public int? Page { get; set; }
    public PagedList.IPagedList<ClientViewModel> Clients { get; set; }
}

public class ClientViewModel
{
    public string ClientNumber { get; set; }
    public string ClientName { get; set; }       
}
票数 3
EN

Stack Overflow用户

发布于 2012-12-10 23:44:54

我会把它简化成这样:

代码语言:javascript
复制
public IEnumerable<ClientViewModel> Clients { get; set; }

代码语言:javascript
复制
model.Clients = from client in GetAllClients().Skip(pageNumber * PageSize).Take(PageSize)
                       select new ClientViewModel
                       {
                           ClientName = client.CLIENTNAME,
                           ClientNumber = client.CLIENTNO,  
                       };
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13799255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档