我正在尝试找出在asp.net MVC中使用ViewModel实现页面列表的正确方法。
假设我有以下PagedClientViewModel:
public class PagedClientViewModel
{
public PagedList.IPagedList<ClientViewModel> Clients { get; set; }
}
public class ClientViewModel
{
public string ClientNumber { get; set; }
public string ClientName { get; set; }
}我的视图将按如下方式引用模型:
@model PagedClientViewModel动作方法看起来像这样:
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应该是什么样子的?
发布于 2012-12-10 22:55:20
您应该更改检索数据的调用,使其包含一个页面参数,并在数据库中进行过滤。这样,您只需从数据库返回所需的数据。
var clients = GetClients(page);此外,如果您不想遍历返回的客户端(这里似乎不需要),只需将返回的列表直接设置为您的ViewModel即可。像这样的东西会起作用的。确保您更新了ViewModel,以便正确键入model.Clients。
var clients = GetClients(page);
model.Clients = clients;发布于 2012-12-11 16:02:16
通过使用这些答案的组合,我得到了一个非常好的结果:
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; }
}发布于 2012-12-10 23:44:54
我会把它简化成这样:
public IEnumerable<ClientViewModel> Clients { get; set; }和
model.Clients = from client in GetAllClients().Skip(pageNumber * PageSize).Take(PageSize)
select new ClientViewModel
{
ClientName = client.CLIENTNAME,
ClientNumber = client.CLIENTNO,
};https://stackoverflow.com/questions/13799255
复制相似问题