【发布时间】:2018-07-26 06:33:47
【问题描述】:
我在我的项目中使用分页。我有搜索框并将搜索文本发送到操作结果。
我在 Search ActionResult 中找到了断点。选择查询后,我的新闻和公告正在填写。
搜索操作结果
public ActionResult Search(string searchText,int? page)
{
int pageIndex=page??1;
int dataCount=20;
dbContext=new dbContext();
SearchViewModel searchViewModel=new SearchViewModel();
var news=(from news in dbContext.News
where news.Title.Contains(searchText)
select news).ToList();
var announcement=(from announcement in dbContext.Announcement
where announcement.Title.Contains(searchText)
select announcement).ToList();
searchViewModel.News=news;
searchViewModel.Announcement=announcement;
List<SearchViewModel> searchViewModelList=new List<SearchViewModel> {searchViewModel};
return View(searchViewModelList.ToPagedList(pageIndex,dataCount));
}
SearchViewModel
public class SearchViewModel
{
public IEnumerable<News> News {get;set;}
public IEnumerable<Announcement> Annocument{get;set;}
}
我的模型在视图中不为空。搜索后我正在显示我的所有数据标题。 PagedList 已显示,但只有 1 页。
Search.cshtml
@model PagedList.IPagedList<MyProject.ViewModels.SearchViewModel>
@using PagedList
@using PagedList.Mvc
<div class=container>
@foreach (var item in Model)
{
foreach (var news in item.News)
{
@news.Title
}
foreach(var announcement in item.Announcement)
{
@announcement.Title
}
}
@Html.PagedListPager(Model,page=>Url.Action("Search",new {page=page}));
</div>
我之前在我的项目中使用了 PagedList。但我想在 ViewModel 中使用。我哪里错了?
【问题讨论】:
-
你只创建了一个`
searchViewModel的实例——在一条记录上使用分页是没有意义的。而且您的代码正在从数据库中获取所有记录,而不仅仅是您想要的 20 条记录。而ToPagedList()设计用于处理数据模型(您使用IQueryable<T>,而不是List<T>),而不是查看模型(因为您可以使用StaticPagedList) -
@StephenMuecke 感谢您的回答。我已经从数据库中获取了所有数据。 20是为了尝试。我的代码应该如何?我会将 List 更改为 IQueyable 吗?
-
服务器端分页的全部意义在于只从数据库中获取您想要的记录(即只有 20 条,而不是全部)。而且您不能将
PagedList用于 2 个模型(无论如何这没有任何意义,因为每个模型的项目数量不同) -
@StephenMuecke 我明白了。但我需要从 2 个表中获取数据。我只在我的代码中将 List 更改为 IQueryable ?
-
@StephenMuecke 我已经看过了。你在第一篇文章中写了你的 use 和 IQueryable
。我在问如何在没有 ViewModels 的情况下解决我的问题?
标签: asp.net-mvc pagination pagedlist