我想知道在asp.net中使用viewModel时如何实现分页。 使用Jquery以不加载所有表数据。 这是我的项目。
我有2张桌子:
产品包含:产品ID-产品名称-产品描述。
图像包含:ImageID-ImagePath-ProductFK
在我的ViewModel中
Tombstone
在我的索引视图中
public class myViewModel
{
public List<Products> myProducts { get; set; }
public List<Images> myImages{ get; set; }
}
这是我的控制器,用于返回产品和图片列表。
@model myProject.myViewModel
@foreach (Products item in Model.myProducts)
{
@item.ProductName
@item.ProductDescription
}
答案 0 :(得分:1)
在控制器或共享设置类中创建一个变量来确定页面大小,如果将来要更改,将在一个位置进行更改(或者您可以根据系统设置动态读取它)。
public int pageSize
{
get
{
return 10;
}
}
在您的视图模型中,添加一个名为 pageNumber 的新int字段。 您将设置此变量以告诉您的控制器要提取哪个页面。
然后仅使用实体框架LINQ从数据库中获取所需数据:
public ActionResult Show()
{
var viewModel = new myViewModel{
myProduct= DB.Products..ToList(),
myImages= DB.Images.OrderBy(a => a.Id).Skip(pageSize * (pageNumber- 1))
.Take(pageSize).ToList(); // this will fetch only required data from database
}
return View(viewModel);
}
并且在您的UI中,您需要将页码传递给controller,您的操作将变为:
public ActionResult Show(int pageNumber)
{
var viewModel = new myViewModel();
viewmodel.PageNumber = pageNumber; // pass it to view again you may need to give the selected page special css
}